![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| n0xi0uzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 29.12.2004 Где: Санкт-Петербург Репутация: нет Всего: 1 |
В общем, задача реализовать поиск слова в текстовом файле как можно более быстро. Что-то где-то слышал, что лучше это сделать за счёт связанных списков. Насколько я понял, в Perl они реализуются за счет хешей. Но, по скольку никогда с ними не работал, прошу рассказать, как это реализуется и какие ещё способы можно найти.
Сорри, если где протупил |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
n0xi0uzz,
тебе нужно найти просто слово или количество его повторений? Если просто слово, то испольщуй ре, только подумай, что является словом. Если количестов повторений, то, действительно, без хеша тебе не обойтись. Это сообщение отредактировал(а) sharq - 4.3.2006, 11:49 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
|
|||
|
||||
| n0xi0uzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 29.12.2004 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Мне надо найти слово в тексте. Эммм, только вот я не понял, что использовать? Что есть "ре"? 2tishaishii это я знаю, но неужели это самый быстрый способ? |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
n0xi0uzz,
ре - это re (regular expressions), регулярные выращения! А как по другому? Другого способа, лучше чем этот в perl нет! Только я бы вот так написал:
-------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Ну еще есть вариант- создать файл с проиндексированным нужным файлом. Но вот только как организовать эту индексную структуру- другой вопрос
|
|||
|
||||
| n0xi0uzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 29.12.2004 Где: Санкт-Петербург Репутация: нет Всего: 1 |
А если проходить циклом for с двух сторон по файлу? Не быстрее будет? Или ещё что-нить такое придумать...
Или я туплю? |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
А если разделить файл на несколько частей и запустить их сканирование в несколько потоков одновременно?
|
|||
|
||||
| n0xi0uzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 29.12.2004 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Дык я и спрашиваю, как быстрее
|
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
ну конечно многопоточно быстрее
Добавлено @ 21:58 вообще-то быстрее засунуть файл в базу данных, там настроить индексы и производить выборку из базы.. но если у тебя только один файл, который никак не поделить на отдельные записи (не имеет структуры, как обычный текст) то это крайне кривое решение |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
n0xi0uzz,
и дальше, искать как будешь посимвольно или как? это тебе не Cи, здесь рулят регулярные выражения, вот ре написать, стоит подумать как будет оптимальней. Добавлено @ 22:07 rcdimon, Многопоточность полезна только при программировании сетевых интерфейсов! -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| n0xi0uzz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 29.12.2004 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Ну почему же... Построчно по файлу идти, загнав предварительно его содержимое в массив, в строке искать при помощи все тех же регулярок. Вопрос в том, как идти. |
|||
|
||||
| tishaishii |
|
||||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
|
||||
|
|||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
tishaishii,
Что здесь может быть небыстрым? Только обработка найденного, т.е. создания хеша слов с количеством упоминания слова в тексте. А поиск через регулярное выражения работает так же быстро, как и твое. Ключик o в твоем первом примере не много чего решает. А вот ключик с в совокупности с m и g - полезный! И затея с map - хуже, чем с while. Твой первый пример ищет конкретное слово, а точнее количество употреблений конкретного слова, а мой пример ищет все слова и количество их употреблений в тексте. Поэтому твой пример быстрее. Это сообщение отредактировал(а) sharq - 5.3.2006, 13:13 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Использование map добавляет создание безымянного массива.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |