Алгоритм Колусси — различия между версиями
Kabanov (обсуждение | вклад) м |
Kabanov (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
==Алгоритм== | ==Алгоритм== | ||
+ | Отметим, что нумерация символов строк и элементов массива у нас начинается с <tex>0</tex>. | ||
+ | |||
+ | Сначала построим массивы: Kmp, Kmin, Rmin, Shift. | ||
+ | |||
+ | {{Определение | ||
+ | |definition=Обозначим за <tex>\mathrm{Kmin}(i)=i - \mathrm{Kmp}(i)</tex> функцию, возвращающую количество прыжков для позиций <tex>i</tex>, которые являются полными. | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |definition=Обозначим за <tex>\mathrm{Rmin}(i)</tex> функцию, возвращающую наименьший из периодов шаблона, которые больше позиции <tex>i</tex>, для позиций, которые являются пустыми. | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |definition=Функция сдвига <tex>\mathrm{Shift}(i) = \begin{cases} | ||
+ | \mathrm{Rmin}(i), & \mbox{if } \mathrm{Kmp}(i) = -1\\ | ||
+ | \mathrm{Kmin}(i), & \mbox{otherwise} | ||
+ | \end{cases}</tex> | ||
+ | }} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
==Псевдокод== | ==Псевдокод== | ||
==Асимптотики== | ==Асимптотики== |
Версия 21:27, 14 мая 2014
Содержание
Алгоритм
Отметим, что нумерация символов строк и элементов массива у нас начинается с
.Сначала построим массивы: Kmp, Kmin, Rmin, Shift.
Определение: |
Обозначим за | функцию, возвращающую количество прыжков для позиций , которые являются полными.
Определение: |
Обозначим за | функцию, возвращающую наименьший из периодов шаблона, которые больше позиции , для позиций, которые являются пустыми.
Определение: |
Функция сдвига |
Псевдокод
Асимптотики
- partitions the set of pattern positions into two disjoint subsets; the positions in the first set are scanned from left to right and when no mismatch occurs the positions of the second subset are scanned from right to left;
- preprocessing phase in time and space complexity;
- searching phase in time complexity;
- performs text character comparisons in the worst case.