Рабин-Карп и поиск множества образцов
Алгоритм Рабина-Карпа в поиске одиночного образца хуже алгоритма Кнута — Морриса — Пратта, алгоритма Бойера — Мура и других быстрых алгоритмов поиска строк по причине его медленного поведения в худшем случае. Алгоритм Рабина-Карпа можно также использовать для поиска множественных образцов с трудоемкостью, линейной в лучшем случае и квадратичной в труднодостижимом худшем случае. Но и здесь он проигрывает алгоритму Ахо - Корасик, имеющему линейное время работы в худшем случае. Таким образом, если мы хотим найти любое из большого набора, скажем длины k, образцов фиксированной длины в тексте, мы можем создать простой вариант алгоритма Рабина-Карпа, который использует хэш-таблицу или любую другую структуру данных множества (set data structure) для проверки того, когда хэш данной строки принадлежит набору хэш значений образцов, которые мы ищем: function RabinKarpSet(string s[1..n], set of string subs, m) { set hsubs := emptySet for each sub in subs insert hash(sub[1..m]) into hsubs hs := hash(s[1..m]) for i from 1 to n if hs ∈ hsubs if s[i..i+m-1] = a substring with hash hs return i hs := hash(s[i+1..i+m]) return not found }Здесь мы предполагаем, что все подстроки имеют фиксированную длину m, но это предположение может быть убрано. Мы просто сравниваем текущее хэш-значение c хэш-значениями всех подстрок одновременно, используя быстрый просмотр в нашей структуре данных множества, и затем проверяя любое совпадение, которое мы находим со всеми подстроками с этим хэш-значением. Другие алгоритмы могут искать одиночный образец за время O(n), и следовательно, они могут быть использованы для поиска k образцов за время O(n k). В противоположность им, вариант алгоритма Рабина-Карпа выше может найти все k образцов за ожидаемое время O(n+k), потому что хэш-таблица, используемая для проверки случая когда хэш подстроки равен хэшу любого из образцов использует O(1) времени.
Логическая структура программы 1. Открываем программу 2. В диалоговом окне выбираем текстовый файл, после выбора которого, текст выведется в окне в RichEdit1 3. В Edit1 под текстом вводим строку для поиска 4. Нажимаем кнопку «Найти» 4.1 Если такая строка есть, то она выделится красным цветом в тексте 4.2 Если строки нет, то будет выведено сообщение «Такой строки нет» 5. Для очистки окна с текстом выберете Файл -> очистить 5.1 Для очистки выделения текста выберете Файл -> очистить выделение 6. Для вывода справки по работе нажмите Справка -> Руководство к работе 7. Для завершения работы нажмите крестик в правом верхнем углу или нажмите Файл -> Закрыть Обоснование выбора языка программирования Моя программа написана на языке программирования Object Pascal, в среде программирования Delphi 7. Я выбрал этот язык программирования и эту среду, так как всё это мне очень хорошо известно и я уже больше года работаю здесь. Преимущества Delphi по сравнению с аналогичными программными продуктами: - быстрота разработки приложений; - высокая производительность разработанного приложения; - низкие требования разработанного приложения к ресурсам компьютера; - наращиваемость за счет встраивания новых компонентов и инструментов в среде Delphi; Система программирования Delphi рассчитана на программирование различных приложений и представляет большое количество компонентов для этого. Обоснование выбора структур данных для решения задачи Я не использовал никаких структур данных, так как в моей программе это не нужно.
Таблица идентификаторов:
Спецификации программных модулей Программный модуль — это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса. Unit1 является основным модулем программы. В нем описываются все основные процедуры и функции. Но в программе есть ещё Unit2 и Unit3.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему стероиды повышают давление?: Основных причин три... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1087)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |