Содержание
- 2. Постановка задачи Есть образец и строка, надо определить индекс, начиная с которого образец содержится в строке.
- 3. Пример Дана последовательность символов x[1]..x[n]. Определить, встречаются ли в ней идущие друг за другом символы "abcd".
- 4. Простой алгоритм Решение. Имеется примерно n (если быть точным, n-3) позиций, на которых может находиться искомое
- 5. Конечные автоматы при чтении слова x слева направо мы в каждый момент находимся в одном из
- 6. Конечные автоматы Читая очередную букву, мы переходим в следующее состояние по правилу:
- 7. Алгоритм состояние буква состояние 0 a 1 0 кроме a 0 1 b 2 1 a
- 8. Фрагмент программы-1 i=1; state=0; {i - первая непрочитанная буква, state - состояние} while ((i n+1) and
- 9. Фрагмент программы-2 else { state= 0; } }else if (state == 1) { if (x[i] ==
- 10. Фрагмент программы-3 { state= 0; } }else if (state == 2) { if (x[i] == ‘c’)
- 11. Фрагмент программы-4 } else if (state == 3) { if( x[i] == ‘d’){ state= 4; }
- 12. Усовершенствованный алгоритм Надо написать программу, которая ищет произвольный образец в произвольном слове. Это можно делать в
- 13. Алгоритм Кнута - Морриса – Пратта (КМП) Работает за время O(m+n), где m – длина образца,
- 14. КМП Длина наиболее длинного префикса, являющегося одновременно суффиксом есть префикс-функция от строки. Префикс –функция заданного образца
- 15. π-функция Алгоритм вычисления Символы строк нумеруются с 1. Пусть π(S,i) = k. Попробуем вычислить префикс-функцию для
- 16. π-функция При S[i + 1] = S[k + 1] — положить π(S,i + 1) = k
- 17. Пример Для строки 'abcdabscabcdabia' вычисление будет таким: 'a'!='b' => π=0;(длина строки 2; строка ab ) 'a'!='c'
- 18. Пример 'a'=='a' => π=π+1=1; (длина строки 8; строка abcdаbsса) 'b'=='b' => π=π+1=2; (длина строки 9; строка
- 19. Пример реализации
- 20. Алгоритм с использованием префикс-функции Пусть ищется строка S1 в строке S2. Построим строку S= S1$S2, где
- 22. Скачать презентацию