25
Хакасский государственный университет им. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Поиск подстрок. Николай Гребенщиков, www.grebenshikov.ru

Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Embed Size (px)

Citation preview

Page 1: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Хакасский государственный университет им. Н.Ф. Катанова

Структуры и алгоритмы обработки данных

Лекция: Поиск подстрок.

Николай Гребенщиков, www.grebenshikov.ru

Page 2: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Задачи на строках

Основное приложение: вычислительная молекулярная био-логия (расшифровка ДНК).

• Поиск внутренних паттернов. Например, построение пре-фиксного дерева.

• Поиск частных паттернов. Например, поиск подстроки,растояния преобразования, наибольшей общей подпосле-довательности, совпадения с регулярным выражением.

• Поиск характеристических паттернов. Например, поисккратных подстрок.

1

Page 3: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Поиск подстрок

Дано: Текст в виде массива 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. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Терминология

Σ∗ - множество всех строк конечной длины, образованных спомощью символов алфавита Σ.

ε - пустая строка.

xy - конкатенация двух строк.

w < x - w является префиксом строки x, то есть ∃y ∈ Σ∗, чтоx = wy.

w = x - w является суффиксом строки x, то есть ∃y ∈ Σ∗,что x = yw.

3

Page 5: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Лемма о перекрывающихся суффиксах

Пусть x, y, z - строки, для которых выполняются соотноше-ния x = z и y = z.

Если |x| ≥ |y|, то x = y.

Если |x| ≤ |y|, то y = x.

Если |x| = |y|, то x = y.

4

Page 6: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Простейший алгоритм поиска подстрок

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. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Простейший алгоритм поиска подстрок

6

Page 8: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Анализ - простейшего алгоритма поиска подстрок

Наихудший случай: T = an, P = am

T (n) = Θ((n−m+ 1)m)

При m = n/2 T (n) = Θ(n2)

7

Page 9: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм Рабина-Карпа

Идея: использовать хэш-функцию опеределенную на множе-стве строк.

h(S[1..k]) = (S[k] + d(S[k − 1] + . . . + d(S[2] + dS[1]) . . .))mod q,где d - основание системы, q - модуль.

8

Page 10: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм Рабина-Карпа

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. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм Рабина-Карпа

10

Page 12: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм Рабина-Карпа

11

Page 13: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Проблема алгоритма Рабина-Карпа

Из равества h(P ) = ts не следует, что P = T [s..s+m].

Решение проверить сдвиг s посимвольным сравнением.

12

Page 14: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

13

Page 15: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Анализ алгоритма Рабина-Карпа

В наихудшем случае 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. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Конечные автоматы

M = (Q, q0, A,Σ, δ)

Q - конечное множество состояний,

q0 ∈ Q - начальное состояние,

A ⊆ Q - конечное множество допустимых состояний,

Σ - конечный входной алфавит,

δ - функция переходов Q×Σ→ Q.

15

Page 17: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Конечные автоматы

φ - функция конечного состояния.

φ(ε) = q0

φ(wa) = δ(φ(w), a) для w ∈ Σ∗, a ∈ Σ

16

Page 18: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Конечный автомат для поиска подстрок

σ(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. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Конечный автомат для образца P = ababaca

18

Page 20: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм поиска подстроки с помощью конечного ав-томата

19

Page 21: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм вычисления функции переходов

20

Page 22: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Анализ применения конечных автоматов для поиска под-строки

Вычисление функции переходов - T (n,m) = O(m3|Σ|). Суще-ствуют алгоритмы - T (n,m) = O(m|Σ|)

Поиск подстроки - T (n,m) = Θ(n)

21

Page 23: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

На семинар и рефераты

• Поиск наибольшей общей последовательности.

• Алгоритмы поиска подстрок: Кнута-Морриса-Пратта, Бойера-Мура, Демелки-Бейза-Ятса-Гоннета, Бойера-Мура-Хоспула,Бойера-Мура-Санди, Бойера-Мура-Гелила.

• Алгоритмы вычисления растояния ммежду строками: Вагнера-Фишера, Хешберга, Ханта-Шиманского, Укконена-Майерса.

22

Page 24: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

На семинар и рефераты

• Алгоритмы для поиска по регулярным выражениям.

• Алгоритмы вычисления периодичности: Крочемора, Мейна-Лоренца, Колпакова-Кучерова.

• Алгоритмы построения суффиксных деревьев: Укконена,Вайнера, Мак-Крейга.

23

Page 25: Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"

Список литературы

• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.1017-1046.

• Смит, Билл. Методы и алгоритмы вычислений на стро-ках. - М.: ООО “И.Д. Вильямс”, 2006.

• Гасфилд, Дэн. Строки, деревья и последовательности валгоритмах: Информатика и вычислительная биология. -СПб.: Невский Диалект; БХВ-Петербург, 2003.

24