АиСД осень 2012 лекция 12

7
Алгоритмы и структуры данных Зайцев Валентин Евгеньевич

Upload: technopark

Post on 22-Feb-2017

302 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: АиСД осень 2012 лекция 12

Алгоритмы и структуры

данных Зайцев Валентин

Евгеньевич

Page 2: АиСД осень 2012 лекция 12

АиСД: фундаментальное алгоритмическое введение С1

Алгоритмы поиска. Задача поиска. Поиск – одно из наиболее часто программируемых действий. Эффективность поиска – важнейший критерий качества структур данных. Классические задачи поиска: поиск слова в тексте, отыскание данных в БД. Современные задачи поиска: поиск в сети Интернет, антивирусное сканирование программного кода, антиспамовская фильтрация почтовых сообщений, расшифровка молекулярных структур для задач биологии, генетики, фармацевтики. Многокритериальный семантический поиск: очистка и анализ данных, оперативно-розыскная деятельность.Простые алгоритмы поиска. Линейный поиск. Оценка сложности. Анализ условия продолжения цикла. Инвариант и завершимость цикла линейного поиска. Вариант с барьерным элементом. Применение итераторов. Псевдокод.Двоичный поиск. Дихотомия и дерево поиска. Золотое сечение. Хеширование. Анализ цикла двоичного поиска. Сложностная оценка. Сравнение с деревом поиска. Оптимизация цикла путём упрощения предусловия. Позднее обнаружение при использовании барьерного индекса. Доказательство завершимости цикла с модифицированным предусловием. Устойчивость модифицированного двоичного поиска. Псевдокод.

Page 3: АиСД осень 2012 лекция 12

АиСД: фундаментальное алгоритмическое введение С2

Поиск в таблице.

Особенности поиска по составному ключу регулярной структуры. Определение лексикографического порядка строк. Представление строк переменной длины: использование терминатора или дескриптора строки. Преимущество терминального способа: возможность копирования и сравнения строк более быстрым барьерным методом. Аппаратная реализация строк регулируемой длины. Двоичный поиск в лексикографически упорядоченной таблице. Псевдокод с вложенным циклом и финальной проверкой ключа правограничного элемента. Продвинутый код программы двоичного поиска в таблице на C. Использование указателей и терминатора для повышения выразительности поискового кода. Готовые решения двоичного поиска в C(bsearch) и С++ STL (find() и binary_search()) Пример использования готового решения на C.

Page 4: АиСД осень 2012 лекция 12

АиСД: фундаментальное алгоритмическое введение С3

Поиск по образцу.Постановка задачи.

Прямой метод поиска. Прямоугольная оценка сложности. (Кнута-Морриса-Пратта, Бойера-Мура, Карпа-Рабина). Анализ метода с использованием предикатов частичного совпадения и первовхождения. Псевдокод с пред- и постусловием. Преобразование предиката частичного совпадения к поиску несовпадения. Анализ корректности и завершимости модифицированного псевдокода. Недостатки метода: необходимость возвратов, противоречащих инерционности движения носителей устройств внешней памяти. Сложностная оценка. Крэш-тест.

Усовершенствованные методы. Алгоритм Кнута-Морриса-Пратта. Идея метода: использование при сравнении с образцом предыдущих результатов неудачного поиска для быстрого продвижения вперёд. Достаточность самого образца для увеличения сдвига при поиске. Пример. Псевдокод КМП-алгоритма. Обоснование вложенного цикла поиска. Завершимость и корректность. Соображения к вычислению таблицы сдвигов по конкретному образцу. Примеры.

Page 5: АиСД осень 2012 лекция 12

АиСД: фундаментальное алгоритмическое введение С4

Вычисление сдвига как поиск самой длинной совпадающей последовательности в самом образце. Идея применения КМП-алгоритма к вычислению сдвига. Пример реализации КМП-алгоритма. Анализ КМП-поиска. Сложностная оценка: периметр против площади.

Алгоритм Бойера-Мура. Критика КМП-алгоритма. Совпадения реже несовпадений! Смена культуры письменности. Поиск с конца образца. Существенное упрощение таблицы сдвигов. Её построение по рабочему алфавиту. Пример. Модификация поисковых предикатов. Псевдокод БМ-алгоритма. Доказательство корректности и завершимости цикла. Программная реализация БМ-алгоритма (правило плохой литеры без правила хорошего суффикса). Анализ БМ-алгоритма. Сложностные оценки.

Комбинированная стратегия КМП-БМ. Ирония Н. Вирта.

Page 6: АиСД осень 2012 лекция 12

АиСД: фундаментальное алгоритмическое введение С5

Алгоритм Рабина-Карпа. Идея метода: сведение к числовому поиску. Необходимость длинной арифметики. Постоянные и линейные оценки для элементов поисковой арифметики Рабина-Карпа. Аналогии с хэшированием. Сжимающее отображение на аппаратную арифметику. Программная реализация для 32- и 64-битной арифметики.

Более сложные реализации усовершенствованных методов. Использование Z-блоков для поиска образца в строке в алгоритме Кнута-Мориса-Пратта. Вариант алгоритма Кнута-Мориса-Пратта реального времени. Множественный поиск образцов в строке. Алгоритм Ахо-Корасик.Построение связей неудач для дерева ключей. Поиск в строке образца с метасимволами («джокерами»). Алгоритм Бойера-Мура. Правило плохой литеры, расширенное правило плохой литеры. Сильное и слабое правило хорошего суффикса. Предварительная обработка образца с использованием Z-блоков. Алгоритм Апостолико-Джанкарло с линейной оценкой времени.

Методы поиска и поисковые системы. Технологии Мэйл.Ру.

Page 7: АиСД осень 2012 лекция 12

Конец лекции [email protected]