Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм Ахо-Карасик   Найти похожие ветки 

 
cyborg   (2008-08-14 15:37) [0]

У кого-нибудь есть информация по этому алгоритму? В инете искал, не нашел. Если есть готовый код на Delphi, буду безмерно рад.


 
TUser ©   (2008-08-14 15:44) [1]

Стоит поискать книгу Гасфилда, там есть код на паскале, считай, что на Delphi. В качестве отсебятины могу нарисовать тут псевдокод, если надо.


 
cyborg   (2008-08-14 15:51) [2]


> TUser ©   (14.08.08 15:44) [1]

Нарисуй, если не сложно.


 
easy ©   (2008-08-14 16:25) [3]

не этот?
http://en.literateprograms.org/Kruskal%27s_algorithm_(Pascal)


 
easy ©   (2008-08-14 16:38) [4]

на C#
http://www.codeproject.com/KB/recipes/ahocorasick.aspx


 
cyborg   (2008-08-14 17:10) [5]


> easy ©

Спасибо


 
TUser ©   (2008-08-14 17:41) [6]

Странно, я под именем "алгоритм Ахо-Корасика" понимаю нечто совсем другое - множественный поиск подстроки.

Какую задачу хочет решить автор?


 
cyborg   (2008-08-14 17:46) [7]

Меня интересует хранение списка слов (включая слова с масками), быстрый поиск в этом списке нового слова, ну и множественный поиск подстроки тоже интересует.


 
TUser ©   (2008-08-14 17:54) [8]

Ну да, просто Крускал - это вроде из другой оперы.

Без деталей, и вряд ли это будет понятно, увы. Кажется на алголисте было описание этого алгоритма.

type
 TTree = префиксное дерево банка текстов, в которых производится поиск

procedure FindMovement (vertex)
begin
 // находим максимальный суффикс, являющийся префиксом какого-либо текста
 // это делается аналогично такому же методу в алгоритме Кнута-Мориса-Пратта, только тут у нас не один текст, а префиксное дерево
end;

procedure FindStringInTexts (string, position, vertex);
begin
 if no childs of the vertex then
   return "Найдено"

 for the every child of the vertex do
   if the child_letter is string[position] then
     FindStringInTexts (string, position+1, child)

 if no hit obtained then
     FindStringInTexts (string, position, movment for child);
end;

procedure AhoCorasic(Str: string; texts);
begin
 1. Build the prefix tree (при этом добавляем фиктивные листья, маркирующие коноцы текстов - см. пример).

 2. Ищем функции перехода
 Для каждого узла ф.п. - это такой предковй узел (возможно, не непосредственный предок, на который надо переходить, если найдено несовпадение символов.)
 for the every child of the top vertex do
   FindMovments (child)

 FindStringInTexts (Str + "$", 1, TopVertexOfTheTree)
end;

Пример построения префиксного дерева

Даны тексты
abcabac
abcab
caba
abcaabac

Добавляем фиктивный конечный символ, отсуствующий в алфавите
abcabac$
abcab$
caba$
abcaabac$

Имеем дерево
         a-b-a-c-$
         |
Top-a-b-c-a-b-a-c-$
|          |
|          $
|
Lc-a-b-a-$


 
cyborg   (2008-08-14 18:02) [9]


> TUser ©   (14.08.08 17:54) [8]

Спасибо



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
15-1218723698
Урсулапов
2008-08-14 18:21
2008.10.05
что-то с explorer.exe


2-1219812694
Гость
2008-08-27 08:51
2008.10.05
Выбор значения в комбике.


15-1218377553
Урсулапов
2008-08-10 18:12
2008.10.05
А почему пост про день рождения 9 августа не было?


2-1219988657
Finjy
2008-08-29 09:44
2008.10.05
Компонент TreeVeiw


15-1218782116
Dennis I. Komarov
2008-08-15 10:35
2008.10.05
Вопросик по сетке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский