Курсовая работа: Порівняльний аналіз ефективності та складності алгоритмів пошуку елементів у масивах

Розглянемо всю программу, що шукає рядок в тексті.

Program KnutMorrisPrattSearch;

{ Опис процедури Prefix і пов’язаних з нею змінних}

var n : longint;

T : array[1..40000] of char;

Begin

{ Ввід тексту і зразку}

Prefix; { Обчислення префікс-функції}

k:=0; { кількість символів, що співпадають на даний час}

for i:=1 to n do

begin

while (k>0) and (S[k+1]<>T[i]) do

k:=P[k];

if S[k+1]=T[i] then

k:=k+1;

if k=m then { якщо співпали всі символи}

begin

writeln(' Зразок входить в текст починаючи з ',i-m+1,' -ого символу');

k:=P[k];

end;

end;

End.

Довести, що ця програма працює за лінійний проміжок часу, можна аналогічно доведенню, наведеному вище для процедури Prefix . Отже, загальний час роботи програми рівний O(n+m) , тобто лінійний час.

Алгоритм Кнута-Морріса-Пратта більш громіздкий ніж наведені вище, проте час роботи із великими об’ємами даних є набагато меншим, тобто він більш швидше працює із великими об’ємами тексту ніж решта алгоритмів.

Реалізація алгоритму на Turbo Pascal. Нехай маємо рядок і підрядок, що складаються лише з літер англійського алфавіту, використовуючи метод Кнута-Морріса-Пратта знайти позицію першого входження даного підрядка в рядок.

Program Seach_2_3;

К-во Просмотров: 468
Бесплатно скачать Курсовая работа: Порівняльний аналіз ефективності та складності алгоритмів пошуку елементів у масивах