Изменения

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

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

7 байт убрано, 22:34, 1 мая 2016
Асимптотика
* Фаза препроцессинга требует <tex>O(m + \sigma)</tex> времени и памяти, где <tex>\sigma</tex> {{---}} размер алфавита.
* В худшем случае поиск требует <tex>O(m \cdot n)</tex> сравнений.
'''Пример:''' текст, состоящий только из букв <tex>a</tex> и образец <tex>aa..baa</tex>. В таком случае, <tex>BmBc[a]</tex> будет равен <tex>1</tex>, то есть после каждой фазы сравнений мы будем сдвигаться на <tex>1</tex>. Значит, всего будет <tex>n</tex> фаз сравнений, а каждая фаза будет работать отработает за <tex>m - 2</tex>, поскольку расхождение будет только в <tex>3</tex> с конца символе, то мы сравним сначала последний, потом первый, потом средний, а затем пойдем с самого начала, сравнивая все символы подряд. Итого получаем асимптотику <tex>O(m \cdot n)</tex>
* В лучшем случае требует <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>

Навигация