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

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

Embed Size (px)

Citation preview

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

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

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

Евгеньевич

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

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

Алгоритмы сортировки. Постановка задачи сортировки. Удобство использования отсортированных данных. Множественность алгоритмов сортировки и проблема выбора метода.Классификации методов сортировки: внешние и внутренние, устойчивые и неустойчивые, естественные и неестественные. Характерные примеры и применения. Сортировка вставкой. Пример: структура карточной игры. Псевдокод для сортировки массива методом вставки. Поиск места для вставки: трудоголический метод и просеивание. Корректность и завершимость алгоритма. Барьерный вариант метода: экономия на сравнении. Аналогия с терминатором списка. Анализ метода. Минимальное, среднее и максимальное число сравнений и перестановок. Наихудшая и наилучшая производительность. Устойчивость метода. Учёт сравнений и перестановок при разных реализациях ключа и данного. Примеры pro и contra. Идея двоичной вставки и её оценка. Особенности метода вставки при внешней сортировке. Использование вспомогательных файлов. Сложностные оценки. Пример кода для последовательных файлов.

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

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

Сортировка выборкой.

Идея метода: выборка и удаление минимального элемента из сортируемой последовательности с постепенным формированием результата. Противопоставление методу вставки. Псевдокод для сортировки массива методом выборки. Приём с обменом вместо удаления элемента. Доказательство корректности и завершимости метода: индукция по числу отсортированных элементов. Анализ метода. Минимальное, среднее и максимальное число сравнений и перестановок. Наихудшая и наилучшая производительность. Устойчивость метода. Сравнение результатов с методом вставки. Причина низкой производительности метода. Особенности метода выборки при внешней сортировке. Использование вспомогательных файлов. Сложностные оценки. Пример кода для последовательных файлов.

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

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

Обменные сортировки.

Идея метода: прямое упорядочивание путём проверки и обмена соседних элементов. Вертикальная пузырьковая парадигма. Идеи досрочного окончания проходов: исключение из рассмотрения легчайших элементов, прекращение обменов по счётчику обменов и по индексу последнего обмена. Ассимметрия пузырьковой сортировки. Шейкерное улучшение. Псевдокод для пузырьковой сортировки массива и улучшенных вариантов. Анализ метода. Минимальное, среднее и максимальное число сравнений и перестановок. Наихудшая и наилучшая производительность. Устойчивость метода. Сравнение результатов с методами вставки и выборки. Особенности обменных методов при внешней сортировке. Использование вспомогательного файла. Сложностные оценки. Пример кода для последовательных файлов.Единичные перемещения элементов -- главная причина низкой производительности простых методов сортировки. «Применяются: НИКОГДА!?»

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

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

Сортировка Шелла.

Идея метода: естественное ускорение метода вставки путём сортировки подпоследовательностей регулярного уменьшающегося шага с перемещениями на расстояния >> 1 в памяти прямого доступа. Барьерный вариант с множеством терминирующих элементов.Псевдокод для сортировки массива методом Шелла. Анализ метода. Оценки для некоторых наборов шагов. Наихудшая и наилучшая производительность. Отсутствие оптимального решения. Неустойчивость метода. Резонансные случаи: трешинг в системах с виртуальной памятью.Особенности внешней сортировки методом Шелла.Сравнение результатов с простыми методами сортировки.

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

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

Пирамидальная сортировка Флойда.

Идея метода: усовершенствование метода выборки путём построения турнирного дерева (дерева выбора) с сохранением иерархии элементов сортируемого множества. Линеарифмическая сложностная оценка. Причина удвоенного расхода памяти: простая избыточная схема хранения дерева выбора.Минимальная по памяти турнирная сортировка. Идея Флойда: пирамидализация на месте. Упорядочение с помощью иерархической системы пирамид. Вставка элемента в пирамиду по уровню компетентности (просеивание). Псевдокод для пирамидальной сортировки массива. Анализ метода. Наихудшая и наилучшая производительность. Хорошее поведение пирамидального алгоритма при дельтафункциональных данных. Сравнение с методом Шелла. Идея Э. Дейкстры о линеаризации пирамидальной сортировки почти отсортированного массива (гладкая сортировка).

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

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

Быстрая сортировка Хоора.

Идея метода: улучшение наихудшего из простых метода обменной сортировки путём разделений и обменов в памяти прямого доступа. Основополагающий пример с обратно отсортированным массивом. Псевдокод для быстрой рекурсивной сортировки массива. Анализ метода. Линеарифмическая сложностная оценка. Наихудшая и наилучшая производительность. Выбор зернового элемента. Медиана множества как оптимальное решение. Быстрый выбор зернового элемента из трёх случайно взятых. Дихотомический метод быстрого поиска медианы.Распараллеливание быстрой сортировки на [log2(n)] + 1 процессоров. Итеративная версия: моделирование рекурсии с помощью стека, хранение в стеке граничных пар сортируемых подпоследовательностей. Минимизация размера стека путём запоминания границ больших участков.Сравнение с методом Флойда. STL-подход к выбору метода сортировки.

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

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

Сравнение методов внутренней сортировки.

Формулы для простых методов. Оценки производительных методов. Влияние архитектурных факторов, формы и местонахождения ключей.Хронометраж различных методов сортировки на представительном наборе данных.Критика двоичной вставки.Критика шейкерного метода. Сравнение улучшенных методов.

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

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

Внешние сортировки.Особенности внешних сортировок. Невозможность прямого доступа к линейно (вращательно) движущемуся электромеханическому носителю. Аналогия с данными, поступающими по каналам связи.Основополагающий пример со слиянием упорядоченных файлов за линейное время. Идея метода простого слияния. Фазы, проходы (этапы) слияния. Трёхленточность и двухфазность простого слияния. Интеграция слияния и разделения. Четырёхленточный однофазный вариант простого слияния.Анализ метода. Линеарифмическая сложностная оценка. Наихудшая и наилучшая производительность. Пренебрежение сравнениями во внешних сортировках. Пространственная сложность сортировки слиянием. Интерпретация оценки по внешней памяти. Устойчивость метода. Роль сортировки слиянием в STL. Естественное слияние. Позитивная реактивность на упорядоченные участки сортируемых данных. Улучшение средней оценки по сравнению с трудоголичным простым слиянием. Многопоточные слияния. Улучшение линеарифмической оценки многопоточного естественного слияния за счёт логарифмирования по числу магнитофонов.

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

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

Лабораторная работа №2 «Сортировка структур данных».

Реализовать заданный абстрактный тип данных на языке Си. Готовые реализации использовать только для сравнения и тестирования.Составить программу сортировки экземпляра типа заданным методом, используя только абстрактные операции и отношения. Дать сложностные оценки использованным методам с подтверждением в процессе тестирования крайних и средних значений.Для сборки программы, генерации тестов и собственно тестирования использовать средства ОС UNIX. Варианты заданий задаются прежними номерами в матрице на пересечении строк -- методов сортировки и столбцов -- сортируемых структур. Типовое решение: сортировка стека на массиве (код на Си, make-файл и тесты).

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

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