Пример готовой курсовой работы по предмету: Информатика
Содержание
Оглавление
Введение 3
1. Алгоритмы Кнута Морриса-Пратта 6
2. Описание псевдокод для алгоритма поиска 9
2.1. Эффективность алгоритма поиска 10
2.2. "Частичное совпадение" таблицы 12
2.3. Пример таблицы-алгоритм построения 12
2.4. Описание псевдокода для алгоритма табличной строительства 14
2.5. Эффективность алгоритма табличной строительства 15
2.6. Эффективность алгоритма табличной строительства 16
3. Концепция 17
Вывод 19
Список используемой литературы 20
Выдержка из текста
Введение
Алгоритм Кнута–Морриса–Пратта (КМП) — это линейное время решения одного шаблона строки поиска проблемы. Он основан на наблюдении, когда частичное совпадение дает полезную информацию о том, действительно ли игла можетнайтись в стогу сена. Это объясняется тем, что частичное совпадение указывает на то, что какая-то часть сена такая же, как и некоторые части иглы, так что если мы знаем часть на иголки в то, мы сможем сделать некоторые выводы о содержании сена (из-за частичного совпадения) без лишних процедур и потери времени. В частности, это означает, что в определенном смысле, мы хотим предварительно рассчитать, как иголки соответствуют сами себе. Алгоритм, таким образом, "никогда не оглядывается назад" и делает одно сканирование стога сена. Вместе с линейным временем предобработки иглы, это дает линейный алгоритм в целом.
Строки алгоритма сопоставляясь хотят найти начальное значение индекса m в строке S[]
, которая соответствует искомому слову W[].
Наиболее простой алгоритм для поиска символов в последовательных значениях индекса m, является позиция в строке поиска, например S[m].
Если индекс m достигает конца строки, то есть нет соответствия, то в этом случае поиск называется "банкротство". На каждой позиции m алгоритм сначала проверяет равенство первого символа в искомом слове, т. е. S[m]
? W[0].
Если совпадение найдено, то алгоритм проверяет другие символы в искомом слове путем проверки последовательных значений слов позиций индекса i.
Алгоритм возвращает символ W[i], в слове проводятся обыски и проверки на равенство выражению S[mi]
? W[i].
Если все последовательные символы W на позиции m, то совпадение найдено в положении строки поиска.
Если строки равномерно распределили случайные буквы, то шанс, равен 1 к 26. В большинстве случаев, проверки отклоняют исход на начальную букву. Вероятность того, что первые две буквы будут совпадать составляет 1: 262 (1 в 676).
Так что если персонажи являются случайными, то предполагаемая сложность поиска строки S[]
длины K будет равна или выведена. Ожидаемая производительность очень хорошая. Если S[]
это 1 миллиард символов и W[]
составляет 1000 символов, то строка поиска должна окончить примерно один миллиард сравнений.
Ожидается, что производительность не гарантируется. Если строки не случайны, тогда m может занять много сравнений. В худшем случае, если две строки совпадают во всем, кроме последней буквы. Представьте, что строка S[]
состоит из 1 миллиарда символов, и что слово W[]
- это 999 , а символы в конце B. Простую строку алгоритма сопоставления теперь будут изучать по 1000 символов в каждой позиции. Простой пример строки поиска теперь потребуется около 1000 символов и временном сравнении 1 миллиарда позиций в течение 1 трлн сравнений.
Алгоритм КМП имеет лучшую в худшем случае производительность по сравнению с простым алгоритмом. КМП тратит немного времени, и тогда он использует эту таблицу для эффективного поиска строки вО(К).
Разница в том, что КМП использует предыдущую информацию матча, нежели простой алгоритм. В приведенном выше примере, когда КМП не видит пробный матч не на 1000-й символ (i 999), потому что S[m 999]
W[999], он будет увеличивать m на
1. но он будет знать, что первые 998 символов в новой позиции уже совпадают. КМП подобрал 999 символов, прежде чем обнаружил несоответствие на 1000-й символ (позиция 999).
Продвижение позиции совпадет с m по одному параметруи выбрасывает на первую а, так КМП знает, что осталось 998 и символы, которые соответствуют W[]
и не перепроверенные, то есть алгоритм КМП осуществит набор от i до 998. КМП очень функционален благодаря вычисленной таблицы и двумя переменными состояния. Когда КМП обнаруживает несоответствие, таблица определяет, на сколько КМП возрастет (переменная m) и где она будет возобновлять испытание (переменное i).
Список использованной литературы
Список используемой литературы
1. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. – М.: МЦНМО, 1999. – 960 с.
2. Гасфилд Д. Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология. — СПб.: БХВ-Петербург, 2003. – 654 с.
3. Crochemore M., Rytter W. Jewels of Stringology: Text Algorithms. World Scientific Publishing, 2002. – 320 pp.
4. Jurafsky D., Martin J. Speech and Language Processing.PrenticeHall. 1999. – 950 pp