Algoritmy.pptx
- Количество слайдов: 12
Разработка эффективного алгоритма поиска наибольшей общей подстроки КОЧЕВ А. Э. ЮСУПОВ Д. Р.
Задача Дано две строки, возможно разной длины. Длины обоих строк достаточно большие. Необходимо разработать и реализовать алгоритм нахождения максимальной по длине подстроки, которая входит в обе заданные строки. Если таких строк несколько, то выдать все варианты.
Существующие алгоритмы Наивный алгоритм Алгоритм, использующий суффиксный автомат Алгоритм с использованием хеширования
Наивный алгоритм
Алгоритм, использующий суффиксный автомат Дерево суффиксов для "ABAB", “BABA" и "ABBA“.
Алгоритм с использованием хеширования У строки S хешируем подстроки заданной длины и полученные хеши записываем в Set. У строки S хешируем подстроки заданной длины и в случае совпадения хеша с элементом Set проверяем несколько случайных символов подстрок на совпадение. Хеширование будем производить так же, как и в алгоритме Рабина -Карпа. Алгоритм является эвристическим и может выдавать неверный ответ, так как совпадение хешей строк не гарантирует равенство строк. Сложность данного алгоритма O(ln(min(n, m)*max(n, m)))
Разработка алгоритма Для удобства работы с данными строки размещаем в списках. Для удобства поиска дописываем к одному из списков (m-1) «пустых» элементов в начало и в конец. В результате имеется список позиций и максимальная длина подстроки.
Анализ алгоритма
Реализация алгоритма Функция string_to_list(string): функция для перевода строки в список. Функция принимает на вход строку. Результатом функции является список состоящий из всех элементов строки. Данная функция реализована для удобства работы с входными данными. Функция search_max_substring(list 1, list 2): функция поиска наибольше общей подстроки. Принимает два списка (исходные строки), переведенные в списки функцией string_to_list(string). В качестве результата выводит наибольшую общую подстроку (если таковых несколько, выводит все наибольшие подстроки);
Практический эксперимент Время работы алгоритма для строк длинной 2500 символов: Время работы алгоритма для строк длинной 5000 символов: Хуже всего разработанный алгоритм будет работать со строками равной длины.
Результаты проделанной работы
Спасибо за внимание
Algoritmy.pptx