Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
1. Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Поиск подстрок.
Николай Гребенщиков, www.grebenshikov.ru
2. Задачи на строках
Основное приложение: вычислительная молекулярная био-
логия (расшифровка ДНК).
• Поиск внутренних паттернов. Например, построение пре-
фиксного дерева.
• Поиск частных паттернов. Например, поиск подстроки,
растояния преобразования, наибольшей общей подпосле-
довательности, совпадения с регулярным выражением.
• Поиск характеристических паттернов. Например, поиск
кратных подстрок.
1
3. Поиск подстрок
Дано: Текст в виде массива 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
4. Терминология
Σ∗ - множество всех строк конечной длины, образованных с
помощью символов алфавита Σ.
- пустая строка.
xy - конкатенация двух строк.
w < x - w является префиксом строки x, то есть ∃y ∈ Σ∗, что
x = wy.
w = x - w является суффиксом строки x, то есть ∃y ∈ Σ∗,
что x = yw.
3
5. Лемма о перекрывающихся суффиксах
Пусть x, y, z - строки, для которых выполняются соотноше-
ния x = z и y = z.
Если |x| ≥ |y|, то x = y.
Если |x| ≤ |y|, то y = x.
Если |x| = |y|, то x = y.
4
6. Простейший алгоритм поиска подстрок
NaiveStringMatcher(T, P )
1 n ← length[T ]
2 m ← length[P ]
3 for s ← 0 to n − m
4 do if P [1..m] = T [s + 1..s + m]
5 then print(s)
5
15. Анализ алгоритма Рабина-Карпа
В наихудшем случае 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
16. Конечные автоматы
M = (Q, q0, A, Σ, δ)
Q - конечное множество состояний,
q0 ∈ Q - начальное состояние,
A ⊆ Q - конечное множество допустимых состояний,
Σ - конечный входной алфавит,
δ - функция переходов Q × Σ → Q.
15
17. Конечные автоматы
φ - функция конечного состояния.
φ( ) = q0
φ(wa) = δ(φ(w), a) для w ∈ Σ∗, a ∈ Σ
16
18. Конечный автомат для поиска подстрок
σ(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) = σ(Pq a)
17
22. Анализ применения конечных автоматов для поиска под-
строки
Вычисление функции переходов - T (n, m) = O(m3|Σ|). Суще-
ствуют алгоритмы - T (n, m) = O(m|Σ|)
Поиск подстроки - T (n, m) = Θ(n)
21
24. На семинар и рефераты
• Алгоритмы для поиска по регулярным выражениям.
• Алгоритмы вычисления периодичности: Крочемора, Мейна-
Лоренца, Колпакова-Кучерова.
• Алгоритмы построения суффиксных деревьев: Укконена,
Вайнера, Мак-Крейга.
23
25. Список литературы
• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-
мы: построение и анализ, 2-е издание. - М. : Издатель-
ский дом “Вильямс”, 2007. сс.1017-1046.
• Смит, Билл. Методы и алгоритмы вычислений на стро-
ках. - М.: ООО “И.Д. Вильямс”, 2006.
• Гасфилд, Дэн. Строки, деревья и последовательности в
алгоритмах: Информатика и вычислительная биология. -
СПб.: Невский Диалект; БХВ-Петербург, 2003.
24