Порівняння між алгоритмом Ахо-Корасіка та алгоритмом Рабіна-Карпа


11

Я працюю над алгоритмами пошуку рядків, які підтримують пошук декількох шаблонів. Я знайшов два алгоритми, які здаються найсильнішими кандидатами з точки зору часу роботи, а саме Ахо-Корасик та Рабін-Карп . Однак я не зміг знайти жодного всебічного порівняння між двома алгоритмами. Який алгоритм є більш ефективним? Також, який з них більше підходить для паралельних обчислень та пошуку декількох шаблонів? Нарешті, для кого потрібно менше апаратних ресурсів?

Для алгоритму змінного струму фаза пошуку займає час , тоді як для RK це O ( n m ) . Однак час роботи для RK становить O ( n + m ), що робить його подібним до змінного струму. Мій попередній висновок полягає в тому, що RK здається практично кращим, оскільки йому не потрібно стільки пам'яті, як змінного струму. Це правильно?O(n+m)O(nm)O(n+m)


Чи всі ваші візерунки однакової довжини?
Хендрик Ян

@HendrikJan Ні, візерунки різної довжини
Хоук

Якщо шаблони мають різну довжину, здається, важко обробити їх паралельно за допомогою RK? Здається, що на сторінці вікіпедії ці шаблони мають однакову довжину, хоча оновлення хешей можна проводити на різну довжину.
Хендрик Ян

Вас цікавить якесь теоретичне навчання чи практичний досвід?
Рафаель

@Raphael Академічно ми використовували спочатку теоретичне дослідження, перш ніж довести це емпірично. Я розмістив це питання тут, тому що не очікую відповідей на програмування. Мені потрібна логічна алгоритмічна відповідь
Хоук

Відповіді:


4

Асимптотичний аналіз часу роботи, ймовірно, не буде найкращим інструментом для вибору між цими двома алгоритмами: асимптотичний аналіз ігнорує постійні фактори, і постійні фактори тут будуть критичними. Два алгоритми мають в основному однаковий асимптотичний час роботи, тому асимптотичний аналіз, ймовірно, не дуже корисний для вибору між ними.

Натомість правильний вибір між двома алгоритмами здійснюється шляхом експериментального аналізу. Визначте репрезентативне навантаження, а потім порівняйте ефективність обох алгоритмів на вашому навантаженні на типи машин, які ви збираєтесь використовувати на практиці.


O(nm)O(n+m)

O(n+m)c(n+m)cO(n+m)

O(n+m)O(nm)


1

Однак я не зміг знайти жодного всебічного порівняння між двома алгоритмами.

O(n+m)O(nm)

але wrt ваш неявний запит на "всебічне порівняння", деякі статті написані експериментально / емпірично, порівнюючи ці два та інші алгоритми з реальними даними та включають аналіз / порівняння плюсів / мінусів / компромісів різних алгоритмів, наприклад:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.