
- •1.1. Цель работы
- •Поразрядная сортировка
- •1.3. Средства Си для реализации поразрядных сортировок
- •1.4.1. Поразрядная сортировка
- •1.5. Порядок выполнения
- •Цель работы
- •Прямой поиск
- •1.3. Бинарный поиск
- •1.4. Интерполяционный поиск
- •1.5. Порядок выполнения работы
- •1.1. Цель работы
- •1.2. Последовательный (прямой) поиск
- •1.3. Алгоритм поиска Кнута
- •1.4. Поиск Боуера-Мура
- •1.5. Порядок выполнения работы
1.4. Поиск Боуера-Мура
Этот поиск начинает
сравнивать подстроку со строкой, начиная
с последнего символа подстроки. Пусть
сравнение начинается с позиции i
-1. Если нет
полного совпадения, то сдвиг можно
произвести на величину
,
где
- символ строки в позиции i-1.
Сама величина сдвига определяется
следующим образом:
d равно длине образа, если символ не принадлежит подстроке;
d равно расстоянию от самого правого в подстроке вхождения символа до ее конца.
Рассмотрим на примере подстроки «образ», подстрока ищется в тексте «отказ приказ город образ пример». Аналогично поиску Кнута таблица сдвигов рассчитывается еще до работы алгоритма и для рассматриваемого примера равна:
|
|
|
|
|
Все остальные символы алфавита имеют d равное 5 (длине образа).
о |
т |
к |
а |
з |
|
п |
р |
и |
к |
а |
з |
|
г |
о |
р |
о |
д |
… |
|
о |
б |
р |
а |
з |
сдвиг на 5 позиций |
||||||||||||||
|
о |
б |
р |
а |
з |
сдвиг на 5 позиций |
|||||||||||||
|
о |
б |
р |
а |
з |
сдвиг на 4 поз. |
|||||||||||||
|
о |
б |
р |
а |
з |
|
г |
о |
р |
о |
д |
|
о |
б |
р |
а |
з |
|
п |
р |
и |
м |
е |
р |
|
|
|
о |
б |
р |
а |
з |
сдвиг на 5 позиций |
|||||||||||||
|
о |
б |
р |
а |
з |
подстрока найдена |
1.5. Порядок выполнения работы
Получите вариант задания у преподавателя.
Составьте алгоритм поиска подстроки по заданному значению.
Реализуйте алгоритм на языке Си.
Сравните алгоритм прямого поиска с алгоритмами Кнута и Боуера-Мура. Проанализируйте полученные результаты.