Главная страница

Курсовая (1). Программная реализация и анализ алгоритмов поиска в тексте


Скачать 1.83 Mb.
НазваниеПрограммная реализация и анализ алгоритмов поиска в тексте
Дата09.11.2020
Размер1.83 Mb.
Формат файлаdocx
Имя файлаКурсовая (1).docx
ТипКурсовая
#149201
страница2 из 5
1   2   3   4   5

1.2.1 Прямой поиск


Данный алгоритм еще называется алгоритмом последовательного поиска, он является самым простым и очевидным.

Основная идея алгоритма прямым поиском заключается в посимвольном сравнении строки с подстрокой. В начальный момент происходит сравнение первого символа строки с первым символом подстроки, второго символа строки со вторым символом подстроки и т.д. Если произошло совпадение всех символов, то фиксируется факт нахождения подстроки. В противном случае производится сдвиг подстроки на одну позицию вправо и повторяется посимвольное сравнение, то есть сравнивается второй символ строки с первым символом подстроки, третий символ строки со вторым символом подстроки и т.д. (рис. 1) Символы, которые сравниваются, на рисунке выделены жирным. Рассматриваемые сдвиги подстроки повторяются до тех пор, пока конец подстроки не достиг конца строки или не произошло полное совпадение символов подстроки со строкой, то есть найдется подстрока.




i

i

i

i

i

i

i

i


























































Строка

A

B

C

A

B

C

A

A

B

C

A

B

D

Подстрока

A

B

A

C

B

A

A

C

B

A

B

A

C

B

A

D

B

A

C

B

A

D

B

A

C

B

A

D

B

A

C

B

A

D

B

A

C

B

D

B

A

C

D

B

A

D

B


D

Рис.1. Демонстрация алгоритма прямого поиска [8]

//Описание функции прямого поиска подстроки в строке

int DirectSearch(char *string, char *substring){

int sl, ssl;

int res = -1;

sl = strlen(string);

ssl = strlen(substring);

if ( sl == 0 )

cout << "Неверно задана строка\n";

else if ( ssl == 0 )

cout << "Неверно задана подстрока\n";

else

for (int i = 0; i < sl - ssl + 1; i++)

for (int j = 0; j < ssl; j++)

if ( substring[j] != string[i+j] )

break;

else if ( j == ssl - 1 ){

res = i;

break;

}

return res;

}

Данный алгоритм является малозатратным и не нуждается в предварительной обработке и в дополнительном пространстве. Большинство сравнений алгоритма прямого поиска являются лишними. Поэтому в худшем случае алгоритм будет малоэффективен, так как его сложность будет пропорциональна , где n и m – длины строки и подстроки соответственно. [1]
1   2   3   4   5


написать администратору сайта