
- •Понятие «сортировка». Устойчивость сортировки.
- •Задача сортировки.
- •Понятие «ключевое поле» в сортировке.
- •Понятие внутренней сортировки.
- •Понятие внешней сортировки.
- •Причины изучения алгоритмов сортировки.
- •Группы алгоритмов внутренней сортировки.
- •Основные идеи методов сортировок с помощью вставок.
- •2)Улучшение метода простых вставок:
- •Сортировка методом простых вставок.
- •Основные идеи методов сортировок с помощью выбора.-min эл.
- •Сортировка с помощью метода прямого выбора.
- •Основные идеи методов сортировки с помощью обмена.
- •Сортировка методом Шелла.
- •Быстрая сортировка.-разобрать
- •Понятие эффективности алгоритмов и программ.
- •Виды эффективности алгоритмов программ.
- •Порядок сложности алгоритма.
- •Понятие «доминирующая» функция, «асимптотически доминирующая» функция.
- •Правила определения сложности функции.
- •Доминирование функций друг над другом.-разобрать хрень!!!
- •Понятие алгоритма полиноминальной сложности.
- •Понятие алгоритма неполиноминальной сложности.
- •Вопрос 27.
- •Проблемы реализации np-сложных алгоритмов.
- •Вопрос 27.
- •Соответствие между скоростью выполнения алгоритма и его сложностью.
- •Анализ лучшего, худшего и среднего случаев поведения алгоритма.
- •31* Ограниченность о-анализа.
- •Пространственная сложность программы.
- •Взаимосвязь различных типов сложности.
- •Контрольные замеры.
- •Файлы. Их организация и обработка.
- •Стоимость операций с вторичной памятью.
- •Внешняя сортировка. Особенности внешней сортировки.
- •Понятие «серия», «слияние», «хвост», «фаза», «этап» в алгоритмах внешней сортировки.
- •38* Алгоритм 2-х фазной сортировки прямым слиянием.
- •Алгоритм однофазной сортировки прямым слиянием.
- •Алгоритм сортировки «естественным слиянием».
- •Ускорение сортировок прямым слиянием.
- •Задача поиска.
- •Классификация методов поиска.
- •Связь задач сортировки и поиска.
- •Последовательный поиск.
- •Быстрый последовательный поиск.
- •Последовательный поиск в упорядоченной таблице. Поиск путем сравнения ключей.-херня!
- •Бинарный поиск. Интерполяционный поиск.
- •Хеширование Выбор хеш-функций.
- •Хеширование. Разрешение коллизий.
38* Алгоритм 2-х фазной сортировки прямым слиянием.
Для выполнения двухфазной сортировки прямым слиянием нужно 3 файла. f, g, t.
f – исходный. Состоит из серий длиной = 1.
из файла f путем деления на 2 половины формируются файлы g и t.
Файлы g и t сливаются в файл f. При этом одиночные элементы образуют упорядоченные пары или серии длиной 2.
полученный файл f обрабатывается по пунктам 1 и 2. При этом формируем серии длиной 4.
Повторяем шаги, кажд. раз удваиваем длину серии до тех пор, пока не получим серию с длиной равной числу записей в исходном файле или 1 серию.
Исх. ф. f: 3 14 15 9 2 5 17 -4 0
1 проход: фаза разделения g: 3 15 2 17 0
t: 14 9 5 -4
2 фаза: слияние. Считываем 3 и 14. Меньший записываем в f.
f: 3 14 | 9 15 | 2 5 | -4 17 | 0
Фаза разделения: Берем первую серию, помещаем в g. Вторую в t. Третью в g и т.п.
g: 3 14 | 2 5 | 0
t: 9 15 | -4 17 |
Сравниваем 3 и 9. 3 в f. Потом 14 и 9. 9 в f. Сравниваем 14 и 15. Вторая серия: 2 и -4. 2 и 17. 5 и 17.
f: 3 9 14 15 | -4 2 5 17 | 0
Фаза разделения:
g: 3 9 14 15 | 0
t: -4 2 5 17
Фаза слияния: 3 и -4. 3 и 2. 3 и 5. 9 и 5. 9 и 17. 17 и 14. 15 и 17.
f: -4 2 3 5 9 14 15 17 | 0
Фаза разделения:
g: -4 2 3 5 9 14 15 17
t: 0
Фаза слияния: f: -4 0 2 3 5 9 14 15 17
Получили f, состоящего из 1 серии.
В способе половину операций занимает фаза разделения. Во время выполнения этой фазы непосредственного процесса сортировки не происходит. Поэтому можно избавиться от этой фазы, если объединить процесс разделения с процессом слияния. Для этого рез. слияния двух серий сразу будет распределять в 2 файла. В этом случае мы получаем однофазную сортировку.
Алгоритм однофазной сортировки прямым слиянием.
Для данной сортировки нужно 4 файла. f1, f2, g1, g2.
В ходе сортировки будем чередовать работу с этими файлами.
Читаем по одной серии из f1, f2.
сливаем эти серии.
присоединяем результирующую серию длиной 2k к одному из 2-х файлов g1, g2, организованных в виде серий длиной 2к. При этом мы попеременно переключаемся между файлами g1, g2.
делаем файлы f1, f2 пустыми.
повторяем шаги 1-4 меняя файлы f1 на g1, f2 на g2 и наоборот пока не получим файл с одной серией. Т.е. когда мы его не упорядочим.
Пример:
f: 3 14 15 9 2 5 17 -4 0
f1: 3 | 15 | 2 | 17 | 0
f2: 14 | 9 | 5 | -4
Сравниваем 3 и 14. Помещ. в g1. Сравниваем 15 и 9. Помещ. в g2.
g1: 3 14 | 2 5 | 0
g2: 9 15 | -4 17
Делаем пустыми f1, f2.
Сравниваем 3 и 9. 14 и 9. 14 и 15.
f1: 3 9 14 15 | 0
f2: -4 2 5 17 |
Обнуляем g1, g2.
g1: -4 2 3 5 9 14 15 17
g2: 0
Обнулили f1, f2.
f1: -4 0 2 3 5 9 14 15 17
f2:
Конец.
В случае прямого слияния мы не получаем никакого преимущества, если данные в начале частично упорядочены. Размер сливаемых на к-ом проходе серий <= 2k и не зависит от существования более длинных уже упорядоченных серий, кот. можно просто объединить.
Любые 2 серии длинной n и m можно сразу сливать в 1 серию из n + m эл-ов. Сортировка, при кот. всегда сливаются 2 самые длинные серии наз. естественным слиянием.