Изменения

Перейти к: навигация, поиск

Алгоритм Райта

3228 байт добавлено, 17:34, 27 марта 2016
Нет описания правки
* В лучшем случае требует <tex > \Omega(n / m)</tex> сравнений.
'''Пример:''' текст, вида <tex>a..ba..ab..a</tex> и образец <tex>ba..ab</tex>. В таком случае, <tex>BmBc[b]</tex> будет равен <tex>m - 1</tex>. Значит, всего будет не более чем <tex>n / (m - 1)</tex> фаз сравнений, а каждая фаза (кроме той, в которой мы нашли вхождение строки) будет работать за <tex>1</tex>, поскольку расхождение будет уже в последних символах. Итого получаем асимптотику <tex > \Omega(n / m)</tex>
 
==Сравнение с Алгоритмом Бойера-Мура==
[[Файл:RaitaComparing.png|350px|thumb|Right|Верхняя кривая {{---}} алгоритм Бойера-Мура, нижняя {{---}} Райта]]
 
В своей статье Тим Райта экспериментально проверил ускорение алгоритма на реальных текстах. Тесты были приведены на техническом отчете, написанном на английском языке. Длина текста составила <tex>29 550</tex> символов. Использовался '''ASCII''' алфавит (подразумевается теоритический размер алфавита, равный <tex>128</tex>, в тексте было использовано только <tex>85</tex> символов.) Шаблоны длиной <tex>2-20</tex> случайно выбирались из текста, а затем проходил их поиск в тексте. (См. рисунок)
 
Результат показывает ускорение модификации алгоритма на <tex>21-27%</tex> относительно оригинального на всех шаблонах. Шаблон встречался в тексте как минимум один раз (из-за метода его выбора). Однако, результаты теста на шаблонах, которые не встречались в тексте, были очень похожи на верхнюю кривую. Очевидно, что шаблоны, имеющие часто встречающиеся суффиксы, такие как <tex>-ion</tex> или <tex>-ed</tex> вносят наибольший вклад в быстродействие модификации. (В алгоритме Бойера-Мура мы будем идти с конца, пока не найдем различия, то есть произведем сравнение на всем суффиксе, в то время как в алгоритме Райта мы выйдем сразу после несовпадения первых символов).
 
Кроме того, производительность растет с увеличением <tex>m</tex>, поскольку вклад сравнений первого, последнего и среднего символа уменьшается. С другой стороны, производительность ухудшается с уменьшением размера алфавита, поскольку вероятность того, что первый, средний и последний символ из шаблона и текста совпадут, увеличивается. Однако, Тим Райт в своей статье пишет, что несмотря на теоритическую возможность ухудшения, на практике, скорее всего, разница будет заметна лишь на очень маленьких алфавитах (например, длины <tex>2</tex>)
==Пример==
==Источники информации==
* RAITA T., 1992, Tuning the Boyer-Moore-Horspool string searching algorithm, Software - Practice & Experience, 22(10):879-884.* [http://www-igm.univ-mlv.fr/~lecroq/string/node22.html#SECTION00220 www-igm.univ-mlv.fr Exact string matching algorithms {{---}} Raita algorithm]* [https://en.wikipedia.org/wiki/Raita_algorithm enWikipedia {{---}} Raita algorithm]* [http://www.di.ufpe.wikipediabr/~paguso/courses/if767/bib/Raita_1992.org pdf UFPE {{---}} Raita algorithmОригинальная статья]
[[Категория:Алгоритмы и структуры данных]]
[[Категория: Поиск подстроки в строке]]
[[Категория: Точный поиск]]
317
правок

Навигация