Re: Обратная задача: поиск в таблице паттернов

From
Andrey Tarasevich ()
To
Sergei Emantayev
Date
2002-07-03T00:47:47Z
Area
RU.ALGORITHMS
From: "Andrey Tarasevich" <atarasevich@telocity.com>

Sun Jun 30 2002 14:04, Sergei Emantayev wrote to Sergei Emantayev:

 SE>> Теперь у меня есть обратная задача: есть таблица
 SE>> слов,
 SE>> на вход приходит некоторый текст. Нужно найти все
 SE>> слова
 SE>> из таблицы, которые находятся во входном тексте.

 SE> Поделюсь тем решением, которое более-менее меня удовлетворяет
 SE> на данный момент. Слова загоняются в этакое префиксное дерево,
 SE> оно еще "trie" называется. Далее, по дереву бегают несколько 
 SE> поинтеров. Когда приходит новая буква из текста, поинтеры 
 SE> продвигаются на следующие узлы дерева. Тот кто не смог найти
 SE> нужную букву, выбывает из игры. 

 SE> Тем не менее, буду рад услышать о других интересных решениях 
 SE> данной проблемы.

Для решения этой задачи существует известный алгоритм Ахо-Корасик, описанный в
статье

A. Aho and M. Corasick. Efficient string matching: an aid to bibliographic
search. Communications of the Association for Computing Machinery 18 (1975),
333-340

У меня есть бумажная копия. В Инете я этой статьи не видел.

Они строят специальный автомат, который ищет строки в тексте "сразу все
одновременно".

Best regards,
Андрей.

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)