Страница: 1 |
Страница: 1 |
Вопрос: Ночь, улица, фонарь, аптека..
Добавлено: 16.04.09 21:43
Автор вопроса: gekko | Web-сайт:
Товарищи!
Требуется из текста выбрать 50 наиболее часто встречающихся слов (и выстроить в порядке убывания).
Текст - килобайт 200-300.
Кто знает, как это сделать с наибольшей скоростью?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #1
Добавлено: 16.04.09 22:06
Полюбому придется все слова перебирать, а быстрее всего это сделает асм и правильный алгоритм.
Номер ответа: 2
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 16.04.09 22:20
хз как на васике, но на перле\пхп яб делал так:
Создать хеш-таблицу со именем ключей из слов и вначале выставить значение = 0.
то есть типа Words{"telecommunication"} = 0;
потом сплитом по пробелу или чему там вогнать все слова в массив строк (не забыв избвиццо от точек, запятых и прочей муры -- регескепами, например), перебрать его, и на каждое слово либо создавать новый элемент хеш-таблицы или делать ++ на уже существующий..
Проблема будет с выбором 50 частых слов... можно отсортировать каким нить алгоритмом слияния; тогда большая-тета будет = n * log n, но мне кажется можно проще. у кого есть идеи?
Номер ответа: 3
Автор ответа:
gekko
Вопросов: 39
Ответов: 127
Web-сайт:
Профиль | | #3
Добавлено: 17.04.09 15:24
Сделал на Васике, но ОЧЕНЬ медленно выполняется.
Буду пробовать на PHP.
Нашел вот такую прогу, в ней схожее реализованно, но срабатывает напорядок быстрее моего кода на VB. Не думаю чтоб на астме писали. http://slil.ru/27459208
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 17.04.09 15:42
А зачем тут что-то мутить с сублинейнологарифмическими алгоритмами? Решение на PHP прямо в лоб работает на 500КБ 0.5 секунд.
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 17.04.09 15:56
Ugu, ya pro sortirovku bil ne uveren... ya b zabil v mysql i sprosil
select * from words order by number desc limit 50; ili kak tam :D
Номер ответа: 6
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #6
Добавлено: 17.04.09 17:59
А что делает arsort($wc); ? Сортирует? Может сделать 50 проходов и выбрать 50 самых поп. слов? сложность тогда будет линейной...
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 17.04.09 23:26
MySQL при построении индекса как раз и выполняет сортировку, амортизированно O(NlogN). arsort сортирует в обратном порядке, сохраняя ключи. 50N для любого разумного N больше, чем NlogN.