Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoretichni_osnovi_programuvannya.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
132.61 Кб
Скачать

3. Алгоритми пошуку підпослідовності в послідовності. Прямий пошук підрядка в рядку. Алгоритм Кнута – Моріса – Пратта.

Розглянемо пошук у деякому масиві із N елементів базового типу: іншого недовшого масиву з M елементів цього ж типу: . Шукана підпослідовність називається образом. Масив, де здійснюється пошук образу, називається базою. Таким чином, задача пошуку образу у базі полегшується у визначенні першого по порядку індексного номера і у базі, починаючи з якого елементи бази співпадають із послідовністю елементів образу:

Оскільки довжина бази обмежена числом N, то максимально допустиме значення індекса і у базі , при якому ще можливе входження образу визначається з умови:

.

Прямий пошук підрядка в рядку.

Полягає у послідовному порівнянні елементів образу із елементами бази. Якщо при черговому співставленні зафіксовано нерівність, то образ умовно зсовується відносно бази на 1 елемент і порівнюється знову, починаючи з початку образу. При такому алгоритмі пошук може припинитися в одному із двох можливих випадків:

1. Всі елементи образу співпали б із деякою підпослідовністю елементів бази та індексний номер у образі став більшим, ніж довжина образу ( )

2. При черговому співставленні елементів образу і бази зафіксовано нерівність, образ зсовується відносно бази на 1 елемент і при цьому виходить за її межі справа, тобто

Отже, протилежні цим умовам логічні вирази будуть умовою продовження алгоритму пошуку:

Begin

i:=1; j:=1; k:=1;

while (i<=N-M+1) and (j<=M)do

Begin

j:=1;

While(j<=M) and (a[k]=b[j] ) do

Begin

j:=j+1;

k:=k+1;

end;

i:=i+1; k:=i;

End;

If j>M then writeln (‘There is such element with index ’, i-1)

Else writeln (‘there is no such element’)

End.

Метод Кнута-Моріса-Пратта.

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

відстані. Але у цьому методі потрібно перевіряти на якоу елементі фіксується неспівпадання: якощо на першому, то зсув потрібно робити на 1 елемент.

а: 2 1 1 1 1 1 1 1 3 4

в: 1 1 1 3

1 1 1 3

1 1 1 3

1 1 1 3 - Вихід образу за межі бази.

Але при даному методі визначається дефект КМП.

Він проявляться, коли:

- на початку образу мають місце повторення однакових елементів,

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

- Кількість повторень у базі неповинна бути кротною кількості повторень у образі.

Програмна реалізація алгоритму Кнута-Моріса-Пратта:

Begin

i:=1; j:=1; k:=1;

while (i<=N-M+1) and (j<=M)do

Begin

j:=1;

While(j<=M) and (a[k]=b[j] ) do

Begin

j:=j+1;

k:=k+1;

end;

if k=I then i:=i+1

ekse k:=i;

End;

If j>M then writeln (‘There is such element with index ’, i-j)

Else writeln (‘there is no such element’)

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]