7. Поиск подстроки. Алгоритм Кнута-Морриса- Пратта.
Поиск подстроки.
Вход: Строки T длины n и P длины m.
Вопрос: содержит ли T подстроку равную P?
P встречается в T со сдвигом s, если T[1+s,…s+m]=P[1,…s]. В таком случае s -допустимый сдвиг,если T[1+s,…s+m]≠P[1,…s], то s – недопустимый сдвиг.
for ( s = 0; s<=n-m;s++)
{ b= true;
for(i= s; i<=s+m;i++)
if(T[s+i]!=P[i])
{ b=false;
break;}
if(b)
cout<<”Yes”;}
Трудоемкость O((n-m)m). Недостаток алгоритма: для сдвигов s’>s он не исп. инфу полученную при обработке сдвига s.
Алгоритм Кнута-…
Опр. Конечным автоматом называется четверка (Q,q0,), где Q – конечное мн-во состояний, q0 – начальное состояние, - конечный входной алфавит,-ф-ия из Qxв Qx,назыв ф-ией перехода автоматов.
Опр. Конечным автоматом называется пятерка (Q,q0, А,), где Q – конечное мн-во состояний, q0 – начальное состояние, А€Q – конечное мн-во допускающих значений, - конечный входной алфавит,-ф-ия из Qxв Q,назыв ф-ией перехода автоматов.
T = a b b a b a b a b a b c b a
Автомат для сравнения с образцом Р = a b a b c b
temp;
fail[1] = 0;
for(int i=2; i<=m; i++)
{
temp = fail[i-1];
while(temp>0 && (P[temp]!=P[i-1]))
temp = fail[temp];
fail[i] = temp+1;
}
Трудоемкость O(m)
Tpos=1, Ppos=1;
while((Tpos<=n) && (Ppos<=m))
{
if(Ppos == 1 || (T[Tpos] == P[Ppos]))
{ Tpos++; Ppos++;}
else{Ppos = fail[Ppos];}
}
if(Ppos >= m) {return Tpos-m+1;}
else {return 0;}
Трудоемкость O(n)
Теорема. Алгоритм Кнута-Моррриса-Пратта выполняет порядка O(n+m) операций при поиске образца длины m в строке длины n.
- 1.Трудоемкость алгоритмов
- 2.Алгоритмы сортировки
- 3.Сортировка слиянием
- 4.Бинарные поисковые деревья
- 5.2-3-4 Деревья
- 6.Хеширование
- 7. Поиск подстроки. Алгоритм Кнута-Морриса- Пратта.
- 8. Графы. Структуры данных для представления графов
- 9. Алгоритм нахождения Эйлерова цикла
- 10 .Поиск в ширину(волновой алгоритм)
- 11.Поиск в глубину
- 12.Жадные алгоритмы и матроиды
- 13.Задача об остовном дереве. Алгоритмы Прима и Краскала, их реализация
- 14. Алгоритм Дийкстры
- 15. Алгоритм Флойда
- 16. Паросочетания в двудольных графах
- 17. Потоки и разрезы в сетях. Алгоритм Форда-Фалкерсона
- 18. Задача о рюкзаке
- 21. Классы p и np. Полиномиальное сведение.
- 22. Np- полные задачи. Теорема Кука-Карпа-Левина. Np-полнота задачи о клике
- 23. Алгоритмы с гарантированной оценкой точности. Задача упаковки
- 24.Метод локального поиска и поиска с запретами. Задача о максимальном разрезе.
- 25.Метод ветвей и границ. Задача коммивояжера.
- 26. Задача коммивояжера с неравенством треугольника. Алгоритм Кристофидеса
- 27.Задача о независимом множестве, точные и эвристические алгоритмы ее решения
- 28.Задача о раскраске графа, точные и эвристические алгоритмы ее решения.
- 31.Задача о раскраске хордальных графов
- 32.Генетические алгоритмы
- 33. Page Rank
- 34 Криптосистема с открытым ключом. Криптосистема rsa
- 35.Задача разделения секрета.
- 36. Алгоритмы сжатия информации