2. Алгоритмы сортировки.
Постановка задачи сортировки. Удобство использования отсортированных
данных. Множественность алгоритмов сортировки и проблема выбора метода.
Классификации методов сортировки: внешние и внутренние, устойчивые и
неустойчивые, естественные и неестественные. Характерные примеры и
применения.
Сортировка вставкой.
Пример: структура карточной игры. Псевдокод для сортировки массива методом
вставки. Поиск места для вставки: трудоголический метод и просеивание.
Корректность и завершимость алгоритма. Барьерный вариант метода: экономия
на сравнении. Аналогия с терминатором списка.
Анализ метода. Минимальное, среднее и максимальное число сравнений и
перестановок. Наихудшая и наилучшая производительность. Устойчивость
метода. Учѐт сравнений и перестановок при разных реализациях ключа и
данного. Примеры pro и contra. Идея двоичной вставки и еѐ оценка.
Особенности метода вставки при внешней сортировке. Использование
вспомогательных файлов. Сложностные оценки. Пример кода для
последовательных файлов.
3. Сортировка выборкой.
Идея метода: выборка и удаление минимального элемента из сортируемой
последовательности с постепенным формированием результата.
Противопоставление методу вставки. Псевдокод для сортировки массива
методом выборки. Приѐм с обменом вместо удаления элемента.
Доказательство корректности и завершимости метода: индукция по числу
отсортированных элементов. Анализ метода. Минимальное, среднее и
максимальное число сравнений и перестановок. Наихудшая и наилучшая
производительность. Устойчивость метода. Сравнение результатов с методом
вставки. Причина низкой производительности метода.
Особенности метода выборки при внешней сортировке. Использование
вспомогательных файлов. Сложностные оценки. Пример кода для
последовательных файлов.
4. Обменные сортировки.
Идея метода: прямое упорядочивание путѐм проверки и обмена соседних
элементов. Вертикальная пузырьковая парадигма. Идеи досрочного окончания
проходов: исключение из рассмотрения легчайших элементов, прекращение
обменов по счѐтчику обменов и по индексу последнего обмена. Ассимметрия
пузырьковой сортировки. Шейкерное улучшение.
Псевдокод для пузырьковой сортировки массива и улучшенных вариантов.
Анализ метода. Минимальное, среднее и максимальное число сравнений и
перестановок. Наихудшая и наилучшая производительность. Устойчивость
метода.
Сравнение результатов с методами вставки и выборки. Особенности обменных
методов при внешней сортировке. Использование вспомогательного файла.
Сложностные оценки. Пример кода для последовательных файлов.
Единичные перемещения элементов -- главная причина низкой
производительности простых методов сортировки.
«Применяются: НИКОГДА!?»
5. Сортировка Шелла.
Идея метода: естественное ускорение метода вставки путѐм сортировки
подпоследовательностей регулярного уменьшающегося шага с перемещениями
на расстояния >> 1 в памяти прямого доступа. Барьерный вариант с
множеством терминирующих элементов.
Псевдокод для сортировки массива методом Шелла.
Анализ метода. Оценки для некоторых наборов шагов. Наихудшая и наилучшая
производительность. Отсутствие оптимального решения.
Неустойчивость метода. Резонансные случаи: трешинг в системах с
виртуальной памятью.
Особенности внешней сортировки методом Шелла.
Сравнение результатов с простыми методами сортировки.
6. Пирамидальная сортировка Флойда.
Идея метода: усовершенствование метода выборки путѐм построения
турнирного дерева (дерева выбора) с сохранением иерархии элементов
сортируемого множества. Линеарифмическая сложностная оценка. Причина
удвоенного расхода памяти: простая избыточная схема хранения дерева
выбора.
Минимальная по памяти турнирная сортировка.
Идея Флойда: пирамидализация на месте. Упорядочение с помощью
иерархической системы пирамид. Вставка элемента в пирамиду по уровню
компетентности (просеивание).
Псевдокод для пирамидальной сортировки массива.
Анализ метода. Наихудшая и наилучшая производительность. Хорошее
поведение пирамидального алгоритма при дельтафункциональных данных.
Сравнение с методом Шелла.
Идея Э. Дейкстры о линеаризации пирамидальной сортировки почти
отсортированного массива (гладкая сортировка).
7. Быстрая сортировка Хоора.
Идея метода: улучшение наихудшего из простых метода обменной сортировки
путѐм разделений и обменов в памяти прямого доступа. Основополагающий
пример с обратно отсортированным массивом.
Псевдокод для быстрой рекурсивной сортировки массива.
Анализ метода. Линеарифмическая сложностная оценка. Наихудшая и
наилучшая производительность. Выбор зернового элемента. Медиана
множества как оптимальное решение. Быстрый выбор зернового элемента из
трѐх случайно взятых. Дихотомический метод быстрого поиска медианы.
Распараллеливание быстрой сортировки на [log2(n)] + 1 процессоров.
Итеративная версия: моделирование рекурсии с помощью стека, хранение в
стеке граничных пар сортируемых подпоследовательностей. Минимизация
размера стека путѐм запоминания границ больших участков.
Сравнение с методом Флойда.
STL-подход к выбору метода сортировки.
8. Сравнение методов внутренней сортировки.
Формулы для простых методов.
Оценки производительных методов.
Влияние архитектурных факторов, формы и местонахождения ключей.
Хронометраж различных методов сортировки на представительном наборе
данных.
Критика двоичной вставки.
Критика шейкерного метода.
Сравнение улучшенных методов.
9. Внешние сортировки.
Особенности внешних сортировок. Невозможность прямого доступа к линейно
(вращательно) движущемуся электромеханическому носителю. Аналогия с
данными, поступающими по каналам связи.
Основополагающий пример со слиянием упорядоченных файлов за линейное
время. Идея метода простого слияния. Фазы, проходы (этапы) слияния.
Трѐхленточность и двухфазность простого слияния. Интеграция слияния и
разделения. Четырѐхленточный однофазный вариант простого слияния.
Анализ метода. Линеарифмическая сложностная оценка. Наихудшая и
наилучшая производительность. Пренебрежение сравнениями во внешних
сортировках. Пространственная сложность сортировки слиянием.
Интерпретация оценки по внешней памяти.
Устойчивость метода. Роль сортировки слиянием в STL.
Естественное слияние. Позитивная реактивность на упорядоченные участки
сортируемых данных. Улучшение средней оценки по сравнению с
трудоголичным простым слиянием.
Многопоточные слияния. Улучшение линеарифмической оценки многопоточного
естественного слияния за счѐт логарифмирования по числу магнитофонов.
10. Лабораторная работа №2 «Сортировка структур данных».
Реализовать заданный абстрактный тип данных на языке Си.
Готовые реализации использовать только для сравнения и тестирования.
Составить программу сортировки экземпляра типа заданным методом,
используя только абстрактные операции и отношения.
Дать сложностные оценки использованным методам с подтверждением в
процессе тестирования крайних и средних значений.
Для сборки программы, генерации тестов и собственно тестирования
использовать средства ОС UNIX.
Варианты заданий задаются прежними номерами в матрице на пересечении
строк -- методов сортировки и столбцов -- сортируемых структур.
Типовое решение: сортировка стека на массиве (код на Си, make-файл и
тесты).