- •Теоретичні основи програмування
- •1. Комбінаторні алгоритми обробки структур даних. Задачі пошуку та сортування.
- •2. Алгоритми пошуку елемента в масиві за даними критеріями. Прямий і бінарний пошук.
- •3. Алгоритми пошуку підпослідовності в послідовності. Прямий пошук підрядка в рядку. Алгоритм Кнута – Моріса – Пратта.
- •Прямий пошук підрядка в рядку.
- •Метод Кнута-Моріса-Пратта.
- •4. Прямі алгоритми сортування масивів. Алгоритм сортування прямим включення, прямим вибором, прямим обміном. Шейкерне сортування масивів.
- •Сортування прямим включенням.
- •Сортування прямим обміном.
- •Шейкерне сортування.
- •5. Швидкі алгоритми сортування масивів. Алгоритм Шелла, Quick Sort, Heap Sort. Сортування включенням із зменшуваними відстаннями - алгоритм Шелла (1959).
- •Сортування обміном на великих відстанях - алгоритм Quick Sort.
- •Сортування вибором при допомозі дерева - алгоритм Heap Sort.
- •6. Сортування структур даних з послідовним доступом. Алгоритми злиття.
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.
