Upload
nikolay-grebenshikov
View
2.483
Download
0
Embed Size (px)
Citation preview
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Поиск подстрок.
Николай Гребенщиков, www.grebenshikov.ru
Задачи на строках
Основное приложение: вычислительная молекулярная био-логия (расшифровка ДНК).
• Поиск внутренних паттернов. Например, построение пре-фиксного дерева.
• Поиск частных паттернов. Например, поиск подстроки,растояния преобразования, наибольшей общей подпосле-довательности, совпадения с регулярным выражением.
• Поиск характеристических паттернов. Например, поисккратных подстрок.
1
Поиск подстрок
Дано: Текст в виде массива 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
Терминология
Σ∗ - множество всех строк конечной длины, образованных спомощью символов алфавита Σ.
ε - пустая строка.
xy - конкатенация двух строк.
w < x - w является префиксом строки x, то есть ∃y ∈ Σ∗, чтоx = wy.
w = x - w является суффиксом строки x, то есть ∃y ∈ Σ∗,что x = yw.
3
Лемма о перекрывающихся суффиксах
Пусть x, y, z - строки, для которых выполняются соотноше-ния x = z и y = z.
Если |x| ≥ |y|, то x = y.
Если |x| ≤ |y|, то y = x.
Если |x| = |y|, то x = y.
4
Простейший алгоритм поиска подстрок
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
Простейший алгоритм поиска подстрок
6
Анализ - простейшего алгоритма поиска подстрок
Наихудший случай: T = an, P = am
T (n) = Θ((n−m+ 1)m)
При m = n/2 T (n) = Θ(n2)
7
Алгоритм Рабина-Карпа
Идея: использовать хэш-функцию опеределенную на множе-стве строк.
h(S[1..k]) = (S[k] + d(S[k − 1] + . . . + d(S[2] + dS[1]) . . .))mod q,где d - основание системы, q - модуль.
8
Алгоритм Рабина-Карпа
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
Алгоритм Рабина-Карпа
10
Алгоритм Рабина-Карпа
11
Проблема алгоритма Рабина-Карпа
Из равества h(P ) = ts не следует, что P = T [s..s+m].
Решение проверить сдвиг s посимвольным сравнением.
12
13
Анализ алгоритма Рабина-Карпа
В наихудшем случае 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
Конечные автоматы
M = (Q, q0, A,Σ, δ)
Q - конечное множество состояний,
q0 ∈ Q - начальное состояние,
A ⊆ Q - конечное множество допустимых состояний,
Σ - конечный входной алфавит,
δ - функция переходов Q×Σ→ Q.
15
Конечные автоматы
φ - функция конечного состояния.
φ(ε) = q0
φ(wa) = δ(φ(w), a) для w ∈ Σ∗, a ∈ Σ
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
Конечный автомат для образца P = ababaca
18
Алгоритм поиска подстроки с помощью конечного ав-томата
19
Алгоритм вычисления функции переходов
20
Анализ применения конечных автоматов для поиска под-строки
Вычисление функции переходов - T (n,m) = O(m3|Σ|). Суще-ствуют алгоритмы - T (n,m) = O(m|Σ|)
Поиск подстроки - T (n,m) = Θ(n)
21
На семинар и рефераты
• Поиск наибольшей общей последовательности.
• Алгоритмы поиска подстрок: Кнута-Морриса-Пратта, Бойера-Мура, Демелки-Бейза-Ятса-Гоннета, Бойера-Мура-Хоспула,Бойера-Мура-Санди, Бойера-Мура-Гелила.
• Алгоритмы вычисления растояния ммежду строками: Вагнера-Фишера, Хешберга, Ханта-Шиманского, Укконена-Майерса.
22
На семинар и рефераты
• Алгоритмы для поиска по регулярным выражениям.
• Алгоритмы вычисления периодичности: Крочемора, Мейна-Лоренца, Колпакова-Кучерова.
• Алгоритмы построения суффиксных деревьев: Укконена,Вайнера, Мак-Крейга.
23
Список литературы
• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.1017-1046.
• Смит, Билл. Методы и алгоритмы вычислений на стро-ках. - М.: ООО “И.Д. Вильямс”, 2006.
• Гасфилд, Дэн. Строки, деревья и последовательности валгоритмах: Информатика и вычислительная биология. -СПб.: Невский Диалект; БХВ-Петербург, 2003.
24