https://github.com/dron12261/rabin-karp-algorithm
Разработка программы для визуализации алгоритма Рабина-Карпа
https://github.com/dron12261/rabin-karp-algorithm
algorithm application csharp released winforms
Last synced: 9 months ago
JSON representation
Разработка программы для визуализации алгоритма Рабина-Карпа
- Host: GitHub
- URL: https://github.com/dron12261/rabin-karp-algorithm
- Owner: DRON12261
- Created: 2021-02-13T10:13:01.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T16:49:55.000Z (almost 3 years ago)
- Last Synced: 2025-01-29T04:27:45.712Z (10 months ago)
- Topics: algorithm, application, csharp, released, winforms
- Language: C#
- Homepage:
- Size: 159 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Разработка программы для визуализации алгоритма Рабина-Карпа
## Немножко теории
Алгоритм Рабина-Карпа - это алгоритм поиска строк, созданный Ричардом М. Карпом и Майклом О. Рабином, который использует хеширование, чтобы найти какой-либо из набора строк шаблонов в тексте. Алгоритм редко используется для поиска одиночного шаблона, но имеет значительную теоретическую важность и очень эффективен в поиске совпадений множественных шаблонов одинаковой длины. Для текста длины n и шаблона длины m его среднее и лучшее время исполнения равно O(n) при правильном выборе хеш-функции, но в худшем случае он имеет эффективность O(nm). Для приложений, в которых допустимы ложные срабатывания при поиске, то есть, когда некоторые из найденных вхождений шаблона на самом деле могут не соответствовать шаблону, алгоритм Рабина-Карпа работает за гарантированное время O(n) и при подходящем выборе рандомизированной хеш-функции вероятность ошибки можно сделать очень малой. Также алгоритм имеет уникальную особенность находить любую из заданных k строк одинаковой длины в среднем (при правильном выборе хеш-функции) за время O(n) независимо от размера k.
Одно из простейших практических применений алгоритма Рабина-Карпа состоит в определении плагиата. Алгоритм Рабина-Карпа может быстро найти в проверяемой статье примеры вхождения некоторых предложений из исходных материалов. Для устранения чувствительности алгоритма к небольшим различиям можно игнорировать детали, такие как регистр или пунктуация, при помощи их удаления. Поскольку количество строк, которые мы ищем, k, очень большое, обычные алгоритмы поиска одиночных строк становятся неэффективными.
Хеш-функция — функция, осуществляющая преобразование массива входных данных произвольной длины в (выходную) битовую строку установленной длины, выполняемое определённым алгоритмом. Преобразование, производимое хеш-функцией, называется хешированием. Исходные данные называются входным массивом, ключом или сообщением. Результат преобразования (выходные данные) называется хешем, хеш-кодом, хеш-суммой. В общем, нет однозначного соответствия между хеш-кодом (выходными данными) и исходными (входными) данными. Возвращаемые хеш-функцией значения (выходные данные) менее разнообразны, чем значения входного массива (входные данные). Случай, при котором хеш-функция преобразует более чем один массив входных данных в одинаковые сводки, называется коллизией. Вероятность возникновения коллизий используется для оценки качества хеш-функций.
Работа алгоритма заключается в следующем: сначала вычисляется хеш-функция основного текста. Потом вычисляется хэш-функция искомой строки. Далее берется от исходного текста кусок длины, равной длине искомой строки, вычисляется его хэш-функция и сравнивается с хэшем искомой строки. Если они равны, то соответственно и сами строки тоже равны. Дальше до конца исходного текста этот «кусок» сдвигается на символ вперед и заново производятся вычисление и сравнение хэшей. В Приложении 1 можно просмотреть блок-схему алгоритма Рабина-Карпа.
В худшем случае время работы алгоритма Рабина-Карпа — Θ(N*M), в среднем – О(N+M).
Достоинством алгоритма является его относительно хорошая скорость и простая реализация, но есть шанс ложных срабатываний, так как у разных строк могут совпасть хэши.
## Скриншоты

