Курсовая (1). Программная реализация и анализ алгоритмов поиска в тексте
Скачать 1.83 Mb.
|
1.2.1 Прямой поискДанный алгоритм еще называется алгоритмом последовательного поиска, он является самым простым и очевидным. Основная идея алгоритма прямым поиском заключается в посимвольном сравнении строки с подстрокой. В начальный момент происходит сравнение первого символа строки с первым символом подстроки, второго символа строки со вторым символом подстроки и т.д. Если произошло совпадение всех символов, то фиксируется факт нахождения подстроки. В противном случае производится сдвиг подстроки на одну позицию вправо и повторяется посимвольное сравнение, то есть сравнивается второй символ строки с первым символом подстроки, третий символ строки со вторым символом подстроки и т.д. (рис. 1) Символы, которые сравниваются, на рисунке выделены жирным. Рассматриваемые сдвиги подстроки повторяются до тех пор, пока конец подстроки не достиг конца строки или не произошло полное совпадение символов подстроки со строкой, то есть найдется подстрока.
Рис.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] |