Лекция №16. Поиск подстрок. Предмет "Структуры и...
-
Upload
nikolay-grebenshikov -
Category
Education
-
view
2.483 -
download
0
Transcript of Лекция №16. Поиск подстрок. Предмет "Структуры и...
![Page 1: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/1.jpg)
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Поиск подстрок.
Николай Гребенщиков, www.grebenshikov.ru
![Page 2: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/2.jpg)
Задачи на строках
Основное приложение: вычислительная молекулярная био-логия (расшифровка ДНК).
• Поиск внутренних паттернов. Например, построение пре-фиксного дерева.
• Поиск частных паттернов. Например, поиск подстроки,растояния преобразования, наибольшей общей подпосле-довательности, совпадения с регулярным выражением.
• Поиск характеристических паттернов. Например, поисккратных подстрок.
1
![Page 3: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/3.jpg)
Поиск подстрок
Дано: Текст в виде массива T [1..n] и образец в виде массиваP [1..m], где m ≤ n. Элементы массивов P и T - символы изконечного алфавита Σ. Говорят, что P встречается в T сосдвигом s, если 0 ≤ s ≤ n−m и T [s+ 1..s+m] = P [1..m].
Найти: Все допустимые сдвиги с которыми образец P встре-чается в тексте T .
2
![Page 4: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/4.jpg)
Терминология
Σ∗ - множество всех строк конечной длины, образованных спомощью символов алфавита Σ.
ε - пустая строка.
xy - конкатенация двух строк.
w < x - w является префиксом строки x, то есть ∃y ∈ Σ∗, чтоx = wy.
w = x - w является суффиксом строки x, то есть ∃y ∈ Σ∗,что x = yw.
3
![Page 5: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/5.jpg)
Лемма о перекрывающихся суффиксах
Пусть x, y, z - строки, для которых выполняются соотноше-ния x = z и y = z.
Если |x| ≥ |y|, то x = y.
Если |x| ≤ |y|, то y = x.
Если |x| = |y|, то x = y.
4
![Page 6: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/6.jpg)
Простейший алгоритм поиска подстрок
NaiveStringMatcher(T, P )
1 n← length[T ]
2 m← length[P ]
3 for s← 0 to n−m4 do if P [1..m] = T [s+ 1..s+m]
5 then print(s)
5
![Page 7: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/7.jpg)
Простейший алгоритм поиска подстрок
6
![Page 8: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/8.jpg)
Анализ - простейшего алгоритма поиска подстрок
Наихудший случай: T = an, P = am
T (n) = Θ((n−m+ 1)m)
При m = n/2 T (n) = Θ(n2)
7
![Page 9: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/9.jpg)
Алгоритм Рабина-Карпа
Идея: использовать хэш-функцию опеределенную на множе-стве строк.
h(S[1..k]) = (S[k] + d(S[k − 1] + . . . + d(S[2] + dS[1]) . . .))mod q,где d - основание системы, q - модуль.
8
![Page 10: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/10.jpg)
Алгоритм Рабина-Карпа
h(P [1..m]) - хэш образца.
{s : h(P [1..m]) = h(T [s..s+m]) ∧ 0 ≥ s ≥ n−m} - множество до-пустимых сдвигов.
Обозначим ts = h(T [s..s+m]),
тогда ts+1 = (d(ts − T [s+ 1]g) + T [s+m+ 1])mod q,
где g ≡ dm−1(mod q)
9
![Page 11: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/11.jpg)
Алгоритм Рабина-Карпа
10
![Page 12: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/12.jpg)
Алгоритм Рабина-Карпа
11
![Page 13: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/13.jpg)
Проблема алгоритма Рабина-Карпа
Из равества h(P ) = ts не следует, что P = T [s..s+m].
Решение проверить сдвиг s посимвольным сравнением.
12
![Page 14: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/14.jpg)
13
![Page 15: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/15.jpg)
Анализ алгоритма Рабина-Карпа
В наихудшем случае T (n,m) = Θ(m) + Θ((n−m+ 1)m).
Почему?
В общем случае T (n,m) = O(n) + O(m(v + n/q)), где v - ко-личество допустимых сдвигов и q - модуль хэш-функции.
Если v = O(1) ∧ q ≥ m ⇒ T (n,m) = O(m + n) = O(n), так какn ≥ m
14
![Page 16: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/16.jpg)
Конечные автоматы
M = (Q, q0, A,Σ, δ)
Q - конечное множество состояний,
q0 ∈ Q - начальное состояние,
A ⊆ Q - конечное множество допустимых состояний,
Σ - конечный входной алфавит,
δ - функция переходов Q×Σ→ Q.
15
![Page 17: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/17.jpg)
Конечные автоматы
φ - функция конечного состояния.
φ(ε) = q0
φ(wa) = δ(φ(w), a) для w ∈ Σ∗, a ∈ Σ
16
![Page 18: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/18.jpg)
Конечный автомат для поиска подстрок
σ(x) = max{k : Pk = x}, где Pk < P ∧ |Pk| = k - суффикснаяфункция
Пример, P = ab, σ(ε) = 0, σ(ccaca) = 1, σ(ccab) = 2.
Правила построения автомата:
1. Q = {0,1, . . .m}, q0 = 0, A = m
2. δ(q, a) = σ(Pqa)
17
![Page 19: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/19.jpg)
Конечный автомат для образца P = ababaca
18
![Page 20: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/20.jpg)
Алгоритм поиска подстроки с помощью конечного ав-томата
19
![Page 21: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/21.jpg)
Алгоритм вычисления функции переходов
20
![Page 22: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/22.jpg)
Анализ применения конечных автоматов для поиска под-строки
Вычисление функции переходов - T (n,m) = O(m3|Σ|). Суще-ствуют алгоритмы - T (n,m) = O(m|Σ|)
Поиск подстроки - T (n,m) = Θ(n)
21
![Page 23: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/23.jpg)
На семинар и рефераты
• Поиск наибольшей общей последовательности.
• Алгоритмы поиска подстрок: Кнута-Морриса-Пратта, Бойера-Мура, Демелки-Бейза-Ятса-Гоннета, Бойера-Мура-Хоспула,Бойера-Мура-Санди, Бойера-Мура-Гелила.
• Алгоритмы вычисления растояния ммежду строками: Вагнера-Фишера, Хешберга, Ханта-Шиманского, Укконена-Майерса.
22
![Page 24: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/24.jpg)
На семинар и рефераты
• Алгоритмы для поиска по регулярным выражениям.
• Алгоритмы вычисления периодичности: Крочемора, Мейна-Лоренца, Колпакова-Кучерова.
• Алгоритмы построения суффиксных деревьев: Укконена,Вайнера, Мак-Крейга.
23
![Page 25: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"](https://reader036.fdocument.pub/reader036/viewer/2022062514/5594bfbc1a28ab8d748b4657/html5/thumbnails/25.jpg)
Список литературы
• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.1017-1046.
• Смит, Билл. Методы и алгоритмы вычислений на стро-ках. - М.: ООО “И.Д. Вильямс”, 2006.
• Гасфилд, Дэн. Строки, деревья и последовательности валгоритмах: Информатика и вычислительная биология. -СПб.: Невский Диалект; БХВ-Петербург, 2003.
24