Наивный алгоритм сопоставления строк в Python: примеры, избранное, плюсы и минусы
Опубликовано: 2020-05-14Когда возникает необходимость найти входной шаблон в строке символов, кодеры и программисты используют алгоритм сопоставления строк. Обычно в случае короткой строки программисты на Python предпочитают использовать наивный подход, при котором программа проверяет каждую позицию во входной строке на наличие шаблона запроса. В случае совпадения выдается вывод с номером позиции.
Одна из основных причин, по которой используется наивный алгоритм сопоставления строк, заключается в том, что он быстрый и дает довольно точные результаты. Кроме того, он не требует предварительной обработки. В любом случае, мы обсудим эти преимущества позже в этом посте. Давайте сначала разберемся с алгоритмом поиска паттернов, используя наивный подход.
Оглавление
Наивный алгоритм поиска паттернов
При простом поиске строкового шаблона программа проверяет позицию входного шаблона P[1……i] в строке символов T[1…..m].
Обратите внимание, что длина вводимого текста или строки всегда будет больше или равна длине шаблона.
Вот наивный алгоритм поиска шаблонов для разных языков программирования.
Начинать

pat = размер узора
ул = размер строки
для i = 0 to (str – pat), do
для j = 0 погладить, сделать
если text[i+j] ≠ pattern[j], то
разорвать петлю
Готово
если j == pat, то
отображать положение i как найденный шаблон
Готово
Конец
Этот алгоритм очень важен в компьютерных науках, поскольку он помогает выводить результаты поиска.
Читайте : Типы алгоритмов ИИ, которые вы должны знать
Примеры наивного сопоставления строк на Python
Вот пример, где наивный подход к поиску по шаблону используется в коде Python.
# Программа Python для наивного сопоставления строк
# Алгоритм поиска
поиск по определению (P, T):
Х = лен(П)
Y = лен(Т)
# Цикл для сдвига P[] по одному */
для i в диапазоне (X – Y + 1):
j = 0
# Для текущего индекса i проверьте
# для сопоставления с образцом */
для j в диапазоне (0, X):
если (txt[i + j]! = P[j]):
перерыв
если (j == X – 1):
print («Шаблон найден в позиции «, i)
# Код драйвера
если __name__ == '__main__':
T = «ОБНОВИТЬ ДУБУПГРААБУПГРЕДДУ»
П = «ОБНОВИТЬ»
поиск(П, Т)
Выход :
Шаблон найден в позиции 0
Паттерн найден в позиции 17
Объяснение: Первая позиция - это 0 -я позиция. Поскольку паттерн «UPGRAD» был впервые обнаружен здесь, выходные данные показали, что паттерн находится в позиции 0.
Точно так же следующий паттерн был найден в позиции 17.
Лучший случай наивного поиска по шаблону
Существует только один лучший случай для наивного алгоритма поиска по шаблону, в отличие от двух худших случаев.
В лучшем случае первый символ в тексте шаблона отсутствует во входной строке.
Пример:
T[] = «УЛУЧШЕННЫЙ КЛУПГРА»;
P[] = "ТУГРА";
И, следовательно, количество совпадающих шаблонов равно O (n).
Худший случай наивного поиска по шаблону
В наивном подходе к поиску строк есть два худших случая.
- Когда все символы в шаблоне такие же, как и во входной строке.
T [] = "ЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ";

Р [] = "ЕЕЕ";
- Когда только последний символ в шаблоне отличается от входной строки.
T [] = «ЕЕЕЕЕЕЕЕЕЕЕЕЕЕ»;
Р [] = "ЕЕЕЕД";
В таких случаях количество сравнений в O(m*(n-m+1)).
Особенности наивного алгоритма сопоставления строк
Алгоритм сопоставления строк предназначен для поиска всех вхождений заданного шаблона в тексте.
Вот главные особенности алгоритма.

- Это самый простой способ поиска закономерностей во вводимом тексте. Он проверяет все символы один за другим в заданной строке символов.
- Он находит точные совпадения строк — будь то более или более точные вхождения шаблона.
- Это больше используется, когда есть небольшой текст. Кроме того, он не требует каких-либо этапов предварительной обработки.
- Этот метод поиска не занимает лишнего места для работы и поиска шаблонов в строке.
Читайте также: Структура данных и алгоритм в Python.
Преимущества наивного поиска по шаблону
- В подходе наивного поиска не требуются этапы предварительной обработки, поскольку время его выполнения равно времени сопоставления.
- Дополнительное рабочее пространство не требуется.
- Сравнение шаблонов со строками можно выполнять в любом порядке.
Недостатки наивного сопоставления строк
У наивного подхода к сопоставлению строк есть только один недостаток — он неэффективен. Это потому, что когда он находит позицию, он не использует ее снова, чтобы найти другую позицию. Он возвращается к исходной точке и снова ищет паттерн. А значит, он больше не использует информацию из предыдущей смены.
Заключение
Наивный алгоритм сопоставления строк является наиболее предпочтительным подходом к поиску позиций указанных шаблонов в данном тексте по разным причинам, таким как отсутствие требований к предварительной обработке, отсутствие дополнительного места для работы и т. д. Однако его нельзя использовать для довольно больших текстов, потому что его неэффективности для более быстрого выполнения крупных операций.
Мы надеемся, что эта статья дала вам хорошее представление о наивном подходе к поиску по шаблону в Python. Чтобы узнать об использовании этого подхода и получить более широкое представление о теме, свяжитесь с экспертами upGrad. У нас есть специально разработанные курсы для тех, кто хочет расширить свой набор навыков. Свяжитесь с нами сегодня!
Если вам интересно узнать больше об искусственном интеллекте и машинном обучении, ознакомьтесь с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и заданий, Статус выпускника IIIT-B, более 5 практических практических проектов и помощь в трудоустройстве в ведущих фирмах.
Что такое наивный алгоритм сопоставления строк?
Наивный алгоритм сопоставления строк — это алгоритм, который просто сравнивает две строки посимвольно. Этот наивный алгоритм использовался многими ранними компьютерными программами, которые реализовывали простые функции поиска файлов. Другими словами, строки сравниваются посимвольно, и алгоритм останавливается при обнаружении несоответствия. Это неподходящий способ сопоставления строк, так как он медленный и занимает много памяти. Это очень неэффективно, так как количество строк в тексте огромно, а поисковый запрос состоит всего из нескольких символов.
Каковы ограничения наивных алгоритмов сопоставления строк?
Невыполнимость 8-ферзей и связанные с ними проблемы как NP-полные показывают, что наивные алгоритмы сопоставления строк имеют ограничения. Наивный алгоритм сопоставления строк не даст вам решения. В случае сопоставления строк требуется экспоненциальное время. Итак, если у вас есть n строк, которые нужно сопоставить, это займет 2n времени. Чтобы обойти эту проблему, был разработан алгоритм, который сделал возможной проблему сопоставления строк. Этот алгоритм, который является алгоритмом экспоненциального времени, называется алгоритмом Ахо-Корасика. Этот алгоритм работает по принципу динамического программирования.
Как мы можем оптимизировать наивные алгоритмы сопоставления строк?
Оптимизация наивных алгоритмов сопоставления строк выполняется двумя способами:
1) Поиск в базе данных строк: это лучшее решение для поиска в базе данных. Это быстро, но требует огромного бюджета.
2) Попытки: это отличная альтернатива базе данных, потому что их можно делать из памяти, что делает их малобюджетными. Вы можете легко представить строку в виде двоичного дерева. Затем вы просто проходите по дереву и проверяете результат. Если вы обнаружите, что находитесь в конце дерева, вы нашли хорошее совпадение. Нет необходимости возвращаться к началу дерева. Этот алгоритм быстрый, но он не позволяет сравнивать длинные строки.