Рекурсия. Сортировка слиянием. Восходящая сортировка слиянием. Сложность сортировки. Устойчивость сортировок презентация

Содержание

Слайд 2

Пример бесконечной рекурсии У попа была собака, он её любил,

Пример бесконечной рекурсии

У попа была собака, он её любил,
Она съела кусок

мяса, он её убил,
В землю закопал,
Надпись написал:
У попа была собака, он её любил,
Она съела кусок мяса, он её убил,
В землю закопал,
Надпись написал:
Слайд 3

Рекурсивная функция function arifmPr(base, iter: integer): integer; begin if iter

Рекурсивная функция

function arifmPr(base, iter: integer): integer;
begin
if iter = 1 then

arifmPr:= base
else
arifmPr:= arifmPr(base, iter - 1) + base;
end;
Слайд 4

Рекурсивная функция arifmPr(2, 4) arifmPr:= arifmPr(2,3)+2 arifmPr:= 8+2 arifmPr(2, 3)

Рекурсивная функция

arifmPr(2, 4)
arifmPr:= arifmPr(2,3)+2
arifmPr:= 8+2
arifmPr(2, 3)
arifmPr:= arifmPr(2,2)+2
arifmPr:= 6+2

arifmPr(2, 3)
arifmPr:= arifmPr(2,2)+2
arifmPr:= 4+2
arifmPr(2, 2)
arifmPr:= arifmPr(2,1)+2
arifmPr:= 2+2
arifmPr(2, 1)
arifmPr:= 2
Слайд 5

Сортировка слиянием (Mergesort)

Сортировка слиянием
(Mergesort)

Слайд 6

Два классических алгоритма сортировки Критические компоненты в мировой вычислительной инфраструктуре

Два классических алгоритма сортировки

Критические компоненты в мировой вычислительной инфраструктуре
Понимание научных основ

этих алгоритмов даст нам возможность разрабатывать прикладные системы для решения реальных задач
Быстрая сортировка входит в десятку самых полезных алгоритмов, разработанных в 20-м веке
Слайд 7

Сортировка слиянием Основной план Разделить массив на две половины Рекурсивно отсортировать каждую половину Соединить две половины

Сортировка слиянием

Основной план
Разделить массив на две половины
Рекурсивно отсортировать каждую половину
Соединить две

половины
Слайд 8

Сортировка слиянием Цель. Получить два отсортированных подмассива от a[lo] до

Сортировка слиянием

Цель. Получить два отсортированных подмассива от a[lo] до a[mid] и

от a[mid+1] до a[hi]
Видео 1
Слайд 9

Слияние: реализация на Java

Слияние: реализация на Java

Слайд 10

Assertions Assertion. Оператор для тестирования программы Помогает обнаружить логические ошибки

Assertions

Assertion. Оператор для тестирования программы
Помогает обнаружить логические ошибки
Документирует код
Java assert оператор.

Генерирует исключительную ситуацию, если условие не верно

Можно включать и выключать в процессе работы => не влияет на производительность в процессе работы

Лучшие варианты использования. Использовать для проверки инвариантов. Отключать в отлаженном коде

Слайд 11

Сортировка слиянием: реализация на Java

Сортировка слиянием: реализация на Java

Слайд 12

Сортировка слиянием: трассировка

Сортировка слиянием: трассировка

Слайд 13

Видео 2

Видео 2

Слайд 14

Сортировка слиянием: эмпирический анализ Оценка времени выполнения: На ПК 108

Сортировка слиянием: эмпирический анализ

Оценка времени выполнения:
На ПК 108 сравнений/секунду
На суперкомпьютере 1012

сравнений/секунду

Вывод. Хорошие алгоритмы лучше, чем суперкомпьютер

Слайд 15

Сортировка слиянием: количество сравнений и обращений к массиву Утвержение. Сортировка

Сортировка слиянием: количество сравнений и обращений к массиву

Утвержение. Сортировка слиянием использует

NlogN сравнений и 6 NlogN обращений для сортировки массива размером N
Доказательство. C(N) — количество сравнений, A(N) — количество обращений

Решим рекуррентность для N. N — степень двойки

Слайд 16

Разделяй и властвуй Утверждение. Если D(N) удовлетворяет D(N) = 2D(N/2)

Разделяй и властвуй

Утверждение. Если D(N) удовлетворяет D(N) = 2D(N/2) + N,

где N > 1 и D(1) = 0, то D(N) = Nlog2N
Слайд 17

Разделяй и властвуй Утверждение. Если D(N) удовлетворяет D(N) = 2D(N/2)

Разделяй и властвуй

Утверждение. Если D(N) удовлетворяет D(N) = 2D(N/2) + N,

где N > 1 и D(1) = 0, то D(N) = Nlog2N
Слайд 18

Разделяй и властвуй Утверждение. Если D(N) удовлетворяет D(N) = 2

Разделяй и властвуй

Утверждение. Если D(N) удовлетворяет D(N) = 2 D(N/2) +

N, где N > 1 и D(1) = 0, то D(N) = Nlog2N
Слайд 19

Анализ сортировки слиянием: память Утверждение. Сортировка слиянием использует дополнительную память

Анализ сортировки слиянием: память

Утверждение. Сортировка слиянием использует дополнительную память пропорциональную N
Массиву

aux[] нужен N ячеек для последнего слияния
Слайд 20

Сортировка слиянием: реализация Используйте сортировку вставками для маленьких подмассивов Сортировка

Сортировка слиянием: реализация

Используйте сортировку вставками для маленьких подмассивов
Сортировка слиянием очень дорогая

для маленьких подмассивов
Подмассивы для сортировки вставками ~ 7
Слайд 21

Сортировка слиянием: реализация Остановка если все отсортировано Если самый большой

Сортировка слиянием: реализация

Остановка если все отсортировано
Если самый большой элемент первой половины

<= самому маленькому элементу второй половины, то подмассив отсортирован
Полезно для частично-упорядоченного массива
Слайд 22

Сортировка слиянием: реализация Ограничить копирование во вспомогательный массив Экономит время

Сортировка слиянием: реализация

Ограничить копирование во вспомогательный массив
Экономит время (но не память).

Менять местами основной и вспомогательный массив при рекурсивном вызове
Слайд 23

Сортировка слиянием: визуализация

Сортировка слиянием: визуализация

Слайд 24

Восходящая сортировка слиянием (Bottom-up mergesort)

Восходящая сортировка слиянием
(Bottom-up mergesort)

Слайд 25

Восходящая сортировка слиянием Начинаем со слияния подмассивов с размером 1

Восходящая сортировка слиянием

Начинаем со слияния подмассивов с размером 1
Повторяем для подмассивов

с размерами 2, 4, 8, 16, ...
Слайд 26

Восходящая сортировка слиянием: реализация на Java Итог. Простая и не

Восходящая сортировка слиянием: реализация на Java

Итог. Простая и не рекурсивная версия

сортировки слиянием (работает на 10% медленнее, чем нисходящая сортировка слиянием)
Слайд 27

Восходящая сортировка слиянием: визуализация

Восходящая сортировка слиянием: визуализация

Слайд 28

Сложность сортировки

Сложность сортировки

Слайд 29

Сложность сортировки Вычислительная сложность - основа для обучения эффективным алгоритмам

Сложность сортировки

Вычислительная сложность - основа для обучения эффективным алгоритмам для решения

конкреной проблемы Х
Вычислительная модель. Возможные операции
Стоимость модели. Количество операций
Верхняя граница. Стоимость, гарантированная определенным алгоритмам для задачи Х
Нижняя граница. Доказанное ограничение стоимости для всех алгоритмов для задачи Х
Оптимальный алгоритм. Алгоритм с лучшей максимально возможной стоимостью для задачи Х (когда верхняя и нижняя граница приблизительно совпадают)
Пример: сортировка
Вычислительная модель: дерево принятия решений
Стоимость модели: количество сравнений
Верхняя граница: ~ Nlog2N для сортировки слиянием
Нижняя граница: ?
Оптимальный алгоритм: ?
Слайд 30

Дерево принятия решений (для 3-х элементов)

Дерево принятия решений (для 3-х элементов)

Слайд 31

Нижняя граница для сортировки на основе сравнений Утверждение. Ни один

Нижняя граница для сортировки на основе сравнений

Утверждение. Ни один алгоритм сортировки,

основанный на сравнениях, не может гарантировать упорядочить N элементов, выполнив менее log2(N!) ~ Nlog2(N) сравнений
Доказательство
Все элементы массива различны
В худшем случае высота дерева будет h
Бинарное дерево высотой h имеет максимум 2h листьев
N! <= количество листьев <= 2h
Слайд 32

Нижняя граница для сортировки на основе сравнений Утверждение. Ни один

Нижняя граница для сортировки на основе сравнений

Утверждение. Ни один алгоритм сортировки,

основанный на сравнениях, не может гарантировать упорядочить N элементов, выполнив менее log2(N!) ~ Nlog2(N) сравнений
Доказательство
Все элементы массива различны
В худшем случае высота дерева будет h
Бинарное дерево высотой h имеет максимум 2h листьев
N! <= количество листьев <= 2h
Слайд 33

Сложность сортировки Вычислительная модель. Возможные операции Стоимость модели. Количество операций

Сложность сортировки

Вычислительная модель. Возможные операции
Стоимость модели. Количество операций
Верхняя граница. Стоимость, гарантированная

определенным алгоритмам для задачи Х
Нижняя граница. Доказанное ограничение стоимости для всех алгоритмов для задачи Х
Оптимальный алгоритм. Алгоритм с лучшей максимально возможной стоимостью для задачи Х (когда верхняя и нижняя граница приблизительно совпадают)
Пример: сортировка
Вычислительная модель: дерево принятия решений
Стоимость модели: количество сравнений
Верхняя граница: ~ Nlog2N для сортировки слиянием
Нижняя граница: ~ Nlog2N
Оптимальный алгоритм: сортировка слиянием
Первая цель разработки алгоритмов: оптимальный алгоритм
Слайд 34

Сложность сортировки Сравнения? Сортировка слиянием оптимальна по количеству сравнений Память?

Сложность сортировки

Сравнения? Сортировка слиянием оптимальна по количеству сравнений
Память? Сортировка слиянием не

оптимальна по памяти

Урок. Руководствуйся теорией
Не пытайтесь создать алгоритм сортировки гарантирующий ½ Nlog2N сравнений

Слайд 35

Сложность сортировки Можно снизить нижнюю границу для сортировки если есть

Сложность сортировки

Можно снизить нижнюю границу для сортировки если есть информация о:
Упорядоченности

входных данных
Распределении значений ключей
Представлении ключей
Частично-упорядоченный массив
Дубликаты ключей. Зная распределение дубликатов во входных данных, мы можем отказаться от NlogN
Представление ключей. Можем использовать цифровые/символьные сравнения ключей вместо сравнений номеров и строк
Слайд 36

Устойчивость сортировок

Устойчивость сортировок

Слайд 37

Устойчивость Типичная задача. Отсортировать сначала по имени, а затем, по

Устойчивость

Типичная задача. Отсортировать сначала по имени, а затем, по группам

Студенты из

группы 3 больше не отсортированы по именам
Устойчивые сортировки сохраняют порядок элементов с одинаковыми ключами
Слайд 38

Устойчивость Сортировка вставками и сортировка слиянием устойчивы (но не выборочная и Шелла)

Устойчивость

Сортировка вставками и сортировка слиянием устойчивы (но не выборочная и Шелла)

Слайд 39

Устойчивость: сортировка вставками Сортировка вставками устойчива Равные элементы не передвигаются

Устойчивость: сортировка вставками

Сортировка вставками устойчива
Равные элементы не передвигаются

Слайд 40

Устойчивость: выборочная сортировка Выборочная сортировка не устойчива Передвижения элементов на большие расстояния может нарушить порядок

Устойчивость: выборочная сортировка

Выборочная сортировка не устойчива
Передвижения элементов на большие расстояния может

нарушить порядок
Слайд 41

Устойчивость: сортировка Шелла Сортировка Шелла не устойчива Передвижения элементов на большие расстояния может нарушить порядок

Устойчивость: сортировка Шелла

Сортировка Шелла не устойчива
Передвижения элементов на большие расстояния может

нарушить порядок
Имя файла: Рекурсия.-Сортировка-слиянием.-Восходящая-сортировка-слиянием.-Сложность-сортировки.-Устойчивость-сортировок.pptx
Количество просмотров: 217
Количество скачиваний: 0