
0d488a70e59fc3d81a5fcda6d7f668d4.ppt
- Количество слайдов: 23
НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. Н. И. Лобачевского - Национальный исследовательский университет -
Нижегородский государственный университет им. Н. И. Лобачевского Факультет Вычислительной математики и кибернетики Кафедра математического обеспечения ЭВМ Алгоритмы точного поиска образца в тексте Выполнили: Кукаева Светлана kukaeva. svetlana@gmail. com Грачев Андрей andrey. grachev 38@gmail. com Нижний Новгород, 2011 г.
Применения q Поиск и замена фразы в тексте. q Редакторы текста. q Почтовый фильтр (антиспам). Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 3 из 14
Алгоритмы q Алгоритм грубой силы. q Алгоритм Кнутта- Морриса-Пратта. q Алгоритм Боуера-Мура. q Алгоритм Быстрого поиска. Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 4 из 14
Условные обозначения q s – количество символов алфавита q text – строка, в которой происходит поиск q n- длина text q sample – образец, искомая строка q m – длина sample q u – префикс слова w, если существует слово v: uv=w q u – суффикс слова w, если существует слово v: vu=w q z – граница слова w, если cуществуют u, v: w=zu = uv Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 5 из 14
Алгоритм грубой силы q Для каждого символа текста c индексом i от 0 до (n-m) текста проверяем на сравнение с началом образца. q Если text[i] == sample[0], то сравниваем text[i + 1] и sample[1] и т. д. ü Нет необходимости использовать дополнительную память. ü Нет дополнительных временных затрат. ü Худшее время поиска O((n-m)*m)≈O(n*m) Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 6 из 14
Алгоритм Кнутта- Морриса-Пратта (1) q Улучшение 1 i u j ab… ab text sample a ab …ab b Пусть v – граница u (в нашем случае v = ab). Логично продолжать сравнение : text[i+j] и sample[length(v)]. q Улучшение 2: q sample[length(v)] != sample[j] Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 7 из 14
Алгоритм Кнутта- Морриса-Пратта (2) Префикс функция q P[0, …, m-1] q p[i] - это такая наибольшая длина наибольшего собственного суффикса подстроки sample[0, . . , i], совпадающего с её префиксом (граница). q Пример: aabaaab a a a b 0 1 2 2 3 Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 8 из 14
Алгоритм Кнутта- Морриса-Пратта (3) q Строим префикс-функцию p. q Для i< n – Пусть первое несовпадение text[i, … i+m - 1] и sample[0, …, m-1] произошло на позиции j. Ищем позицию, с которой продолжим сравнивать: • (j>0 && sample[j] != text[i]) j = p[j]; Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 9 из 14
Алгоритм Кнутта- Морриса-Пратта (4) q Амортизационная оценка времени работы O(n + m) – Проход по тексту O(n) – Построение таблицы префиксной функции O(m) q Дополнительные затраты на память O(m) Н. Новгород, 2011 г. Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 10 из 14
Алгоритм Боуера-Мура(1) q Ищем справа налево. i+ j i + m-1 text a u sample b u Sample c Сдвиг u q Ищем самое правое вхождение u в sample, чтобы предшествующий ему символ с≠b Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 11 из 69
Алгоритм Боуера-Мура(2) q Ищем справа налево. i+ j i + m-1 text a sample Sample q b u Сдвиг u v Если u полностью больше не входит в sample, сдвигаемся по границе u – v. q Подобные сдвиги реализуются с помощью функции хорошего суффикса! Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. . 12 из 69
Алгоритм Боуера-Мура(3) q Шаги функции плохого символа i+ j i + m-1 text a sample b Sample а Н. Новгород, 5. 4. 2011 u u Сдвиг Не содержит а Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. . 13 из 69
Алгоритм Боуера-Мура(4) q Шаги функции плохого символа i+ j i + m-1 text a u sample b u Sample Сдвиг Не содержит а Для сдвига образца используем максимум из функции плохого символа и хорошего суффикса. Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 14 из 69
Алгоритм Боуера-Мура(5) q Худшее время работы алгоритма – O(n * m) – Среднее – O(n + m) q Дополнительные затраты на память O(m + s) q Время на предобработку O(m + s) q 3 n сравнений в худшем случае при поиске первого совпадения с непериодничным образцом Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 15 из 69
Алгоритм быстрого поиска(1) q Усовершенствованный алгоритмы Боуера-Мура q Использует только функцию плохого символа: i i+ j i + m text a u sample b u d Sample Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 16 из 69
Алгоритм быстрого поиска(2) q Худшее время работы алгоритма – O(n * m) – Среднее – O(n + m) q Дополнительные затраты на память O(s) q Время на предобработку O(m + s) q 3 n сравнений в худшем случае при поиске первого совпадения с непериодничным образцом Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 17 из 69
Вычислительные эксперименты q Количество символов текста – 1 000. q В качестве тестовых данных взята книга «Властелин колец» , ч. 1. (английский язык) q Ищем образец, находящийся в самом конце текста. q Intel Core I 5 - 2300 2. 8 GHz q 4 Gb RAM q Windows 7 Professional, 64 bit q Microsoft. Visual Studio 2008 Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 18 из 69
Результаты (1000 000) Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 19 из 69
Выводы q Алгоритм Кнутта-Мориса-Пратта: – Несмотря на лучшую оценку по сравнению с алгоритмом грубой силы, на практике показал себя не очень хорошо. q Алгоритм Боуера-Мура на данном тесте показал себя лучше всех других алгоритмов. Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. 20 из 69
Список литературы q EXACT STRING MATCHING ALGORITHMS http: //www-igm. univ-mlv. fr/~lecroq/string/ q Префикс-функция. Алгоритм Кнута-Морриса- Пратта http: //e-maxx. ru/algo/prefix_function q http: //ru. wikipedia. org/wiki/%D 0%A 1%D 0%BF%D 0% B 8%D 1%81%D 0%BE%D 0%BA_%D 0%B 0%D 0%BB %D 0%B 3%D 0%BE%D 1%80%D 0%B 8%D 1%82%D 0 %BC%D 0%BE%D 0%B 2 Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. . 21 из 69
Спасибо за внимание Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. . 22 из 69
Вопросы? Н. Новгород, 5. 4. 2011 Алгоритмы точного поиска образца в тексте © Кукаева С. А. , Грачев А. В. . 23 из 69
0d488a70e59fc3d81a5fcda6d7f668d4.ppt