Алгоритм прямого поиска
Алгоритм прямого поиска считается одним из наиболее простых среди остальных алгоритмов поиска подстроки в строке. Прямой поиск осуществляется путем сравнения каждого символа подстроки с символами строки. Если символы не совпадают, то происходит сдвиг и поиск продолжается со следующего символа в строке. Этот алгоритм позволяет найти первое вхождение подстроки в строке и может быть эффективен для не слишком длинных строк и коротких подстрок.
Пример работы
Прямой поиск осуществляется путем сравнения каждого символа подстроки с символами строки. Если символы не совпадают, то происходит сдвиг и поиск продолжается со следующего символа в строке. Вычисление для подстроки ABCABD и строки ABCABCAABCABD. Алфавит – ABCD.
Подстрока: АВСАВD |
|
||
Текст для поиска: |
ABCABCAABCABD |
|
|
Алгоритм прямого поиска |
|||
Процесс поиска: |
Шаг 1 |
ABCABCAABCABD |
|
|
|
Шаг 2 |
АВСАВD |
|
|
Шаг 3 |
АВСАВD |
|
|
Шаг 4 |
АВСАВD |
|
|
Шаг 5 |
АВСАВD |
|
|
Шаг 6 |
АВСАВD |
|
|
Шаг 7 |
АВСАВD |
|
|
Шаг 8 |
АВСАВD |
|
|
Шаг 9 |
АВСАВD |
|
|
Шаг 10 |
АВСАВD |
|
|
Шаг 11 |
АВСАВD |
|
|
Шаг 12 |
АВСАВD |
|
|
Шаг 13 |
АВСАВD |
|
|
Шаг 14 |
АВСАВD |
|
|
Шаг 15 |
АВСАВD |
|
|
Шаг 16 |
АВСАВD |
|
|
Шаг 17 |
АВСАВD |
|
|
Шаг 18 |
АВСАВD |
|
|
Шаг 19 |
АВСАВD |
|
|
Шаг 20 |
АВСАВD |
|
|
Шаг 21 |
АВСАВD |
Таблица 2. Метод прямого поиска
На первом шаге происходит сравнение первых шести символов строки и подстроки: это ABCABD и ABCABC. Совпадает первый символ.
Со второго шага начинается посимвольное сравнение строки и подстроки. Если найдено совпадение, то позиция не сдвигается, а сравнивается следующий символ подстроки со строкой, и так до тех пор, пока не будет обнаружено полное совпадение или его отсутствие. В нашем случае на втором шаге фиксируется совпадение первого символа подстроки «А», на третьем шаге — второго символа «B», на четвёртом шаге — символа «С», на пятом шаге — символа «А», на шестом шаге — символа «В».
На седьмом шаге происходит сдвиг на одну позицию, так как шестой символ строки не совпал с последним символом подстроки. На этом шаге сравнивается ABCABD и BCABCA. Совпадения нет.
На восьмом шаге происходит сдвиг на одну позицию, так как в текущей позиции совпадений нет. На этом шаге сравнивается ABCABD и CABCAA.
На девятом шаге происходит сравнение четвёртого символа строки и первого символа подстроки. Найдено совпадение символа «А». В нашем случае на десятом шаге фиксируется совпадение второго символа «B», на одиннадцатом шаге — символа «С», на двенадцатом шаге — символа «А». Совпадение закончилось, происходит сдвиг.
На тринадцатом шаге происходит сдвиг, так как совпадений нет. На этом шаге происходит сравнение ABCABD и BCAABC.
На четырнадцатом шаге сравнивается ABCABD и CAABCA. Совпадение не найдено, происходит сдвиг.
На пятнадцатом шаге сравнивается ABCABD и AABCAB. Совпадение не найдено, происходит сдвиг.
На шестнадцатом шаге сравнивается ABCABD и ABCABD. Фиксируется совпадение первого символа. На семнадцатом шаге фиксируется совпадение второго символа «B», на восемнадцатом шаге — символа «С», на девятнадцатом шаге — символа «А», на двадцатом — символа «B», на двадцать первом — символа «D». Найдено полное совпадение.
