| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Поиск по текстовику |
| Автор: n0xi0uzz 4.3.2006, 09:42 |
| В общем, задача реализовать поиск слова в текстовом файле как можно более быстро. Что-то где-то слышал, что лучше это сделать за счёт связанных списков. Насколько я понял, в Perl они реализуются за счет хешей. Но, по скольку никогда с ними не работал, прошу рассказать, как это реализуется и какие ещё способы можно найти. Сорри, если где протупил |
| Автор: tishaishii 4.3.2006, 13:47 | ||
|
| Автор: n0xi0uzz 4.3.2006, 14:19 | ||
Мне надо найти слово в тексте. Эммм, только вот я не понял, что использовать? Что есть "ре"? 2tishaishii это я знаю, но неужели это самый быстрый способ? |
| Автор: sharq 4.3.2006, 17:31 | ||
| n0xi0uzz, ре - это re (regular expressions), регулярные выращения! А как по другому? Другого способа, лучше чем этот в perl нет! Только я бы вот так написал:
|
| Автор: rcdimon 4.3.2006, 18:39 |
| Ну еще есть вариант- создать файл с проиндексированным нужным файлом. Но вот только как организовать эту индексную структуру- другой вопрос |
| Автор: n0xi0uzz 4.3.2006, 19:17 |
| А если проходить циклом for с двух сторон по файлу? Не быстрее будет? Или ещё что-нить такое придумать... Или я туплю? |
| Автор: rcdimon 4.3.2006, 19:40 |
| А если разделить файл на несколько частей и запустить их сканирование в несколько потоков одновременно? |
| Автор: n0xi0uzz 4.3.2006, 21:02 |
| Дык я и спрашиваю, как быстрее |
| Автор: rcdimon 4.3.2006, 21:54 |
| ну конечно многопоточно быстрее Добавлено @ 21:58 вообще-то быстрее засунуть файл в базу данных, там настроить индексы и производить выборку из базы.. но если у тебя только один файл, который никак не поделить на отдельные записи (не имеет структуры, как обычный текст) то это крайне кривое решение |
| Автор: sharq 4.3.2006, 22:04 |
| n0xi0uzz, и дальше, искать как будешь посимвольно или как? это тебе не Cи, здесь рулят регулярные выражения, вот ре написать, стоит подумать как будет оптимальней. Добавлено @ 22:07 rcdimon, Многопоточность полезна только при программировании сетевых интерфейсов! |
| Автор: n0xi0uzz 4.3.2006, 23:54 | ||
Ну почему же... Построчно по файлу идти, загнав предварительно его содержимое в массив, в строке искать при помощи все тех же регулярок. Вопрос в том, как идти. |
| Автор: tishaishii 5.3.2006, 01:54 | ||||
|
| Автор: sharq 5.3.2006, 13:11 | ||
tishaishii,
Что здесь может быть небыстрым? Только обработка найденного, т.е. создания хеша слов с количеством упоминания слова в тексте. А поиск через регулярное выражения работает так же быстро, как и твое. Ключик o в твоем первом примере не много чего решает. А вот ключик с в совокупности с m и g - полезный! И затея с map - хуже, чем с while. Твой первый пример ищет конкретное слово, а точнее количество употреблений конкретного слова, а мой пример ищет все слова и количество их употреблений в тексте. Поэтому твой пример быстрее. |
| Автор: tishaishii 5.3.2006, 14:04 |
| Использование map добавляет создание безымянного массива. |
| Автор: sharq 5.3.2006, 17:55 |
| tishaishii, ты прав и еще map и grep возращает новый список элементов, поэтому в данном случае действительно лучше через while! |