34
Алгоритмы и структуры данных Сортировки: часть 2

Алгоритмы и структуры данных осень 2013 лекция 4

Embed Size (px)

Citation preview

Page 1: Алгоритмы и структуры данных осень 2013 лекция 4

Алгоритмы и структуры данных

Сортировки: часть 2

Page 2: Алгоритмы и структуры данных осень 2013 лекция 4

2

1. Слияние

2. Сравнение

3. Порязрядная

Page 3: Алгоритмы и структуры данных осень 2013 лекция 4

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

Разбить массив на 2^k частей размером не больше m.

Отсортировать каждую часть другим алгоритмом

Слить 1 и 2, 3 и 4, … n-1 и n части.

Повторить шаг 3, пока не останется одна часть

3

Page 4: Алгоритмы и структуры данных осень 2013 лекция 4

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

4

Page 5: Алгоритмы и структуры данных осень 2013 лекция 4

Слияние 2х упорядоченных массивов

Выберем массив, крайний элемент которого меньше

Извлечём этот элемент в массив-результат

Продолжаем, пока один из массивов не опустеет

Копируем остаток второго массива в конец массива-результата

5

Page 6: Алгоритмы и структуры данных осень 2013 лекция 4

Слияние 2х упорядоченных массивов

void merge(int *a, int a_len, int *b,

b_len, int *c) {

int i=0; int j=0;

for (;i < a_len and j < b_len;) {

if (a[i] < b[j]) {

c[i+j] = a[i];

++i;

} else {

c[i+j] = b[j];

++j;

}

}

if (i==a_len) {

for (;j < b_len;++j) { c[i+j] = b[j];

}

} else {

for (;i < a_len;++i) { c[i+j] = a[i];

}

}

}

6

Page 7: Алгоритмы и структуры данных осень 2013 лекция 4

Слияние 2х упорядоченных массивов

Сложность O(n+m)

Количство сравнений

Лучшее: min(n,m)

Худшее n+m

7

Page 8: Алгоритмы и структуры данных осень 2013 лекция 4

K-путевое слияние

Дано k упорядоченных массивов суммарным размером n : A1, A2, .. Ak

Построим сбалансированное бинарное дерево с массивами A1..Ak в листьях

В узловых вершинах будем хранить указатель на минимальный элемент поддерева

Изъятие элемента из узловой вершины – изъятие из минимального из дочерних узлов

При изъятии элемента из списка, его размер уменьшается на 1

Если список пуст – его сосед перемещается место родительской узловой вершины

При изъятии происходит одно сравнение на каждом уровне дерева

Высота дерева log(k)

Итого O(n*log(k))

8

Page 9: Алгоритмы и структуры данных осень 2013 лекция 4

K-путевое слияние

Экономия на операциях копирования: n

Количество сравнений такое же как и при log(k) 2х путевых слияниях

9

Page 10: Алгоритмы и структуры данных осень 2013 лекция 4

K-путевое слияние

Построить кучу из первых элементов k массивов O(k)

Скопировать минимум из кучи в результат O(1)

Заменить минимальный элемент в куче следующим из того же массива O(1)

Если массив пуст – извлечь элемент из кучи

Восстановить порядок элементов в куче O(log(k))

Повторить пока куча не пуста

Итого O(k + n*log(k))

10

Page 11: Алгоритмы и структуры данных осень 2013 лекция 4

Сравнение сортировок

11

Page 12: Алгоритмы и структуры данных осень 2013 лекция 4

Поразрядная сортировка

Как сортировать без сравнений

12

Page 13: Алгоритмы и структуры данных осень 2013 лекция 4

Сортировка подсчётом

Page 14: Алгоритмы и структуры данных осень 2013 лекция 4

Сортировка подсчётом

Page 15: Алгоритмы и структуры данных осень 2013 лекция 4

Сортировка подсчётом

Page 16: Алгоритмы и структуры данных осень 2013 лекция 4

Сортировка подсчётом

+ O(n) - linear time

+ stable

+ нет сравнений

- требует O(n) памяти

- O(n) перемещений

Page 17: Алгоритмы и структуры данных осень 2013 лекция 4

LSD raddix sort

Page 18: Алгоритмы и структуры данных осень 2013 лекция 4

LSD raddix sort

Page 19: Алгоритмы и структуры данных осень 2013 лекция 4

LSD raddix sort

Page 20: Алгоритмы и структуры данных осень 2013 лекция 4

LSD raddix sort

+ O(n*key len) время работы

+ O(n) время работы

+ stable

- can’t use unstable sort for buckets

Page 21: Алгоритмы и структуры данных осень 2013 лекция 4

MSD raddix sort

Page 22: Алгоритмы и структуры данных осень 2013 лекция 4

MSD raddix sort

Page 23: Алгоритмы и структуры данных осень 2013 лекция 4

MSD raddix sort

+ O(n*key_len) время работы*

+ O(n) памяти

+ нет сортировки частей размером 1

+ could be unstable

- рекурсивная реализация

Page 24: Алгоритмы и структуры данных осень 2013 лекция 4

MSD vs LSD

Page 25: Алгоритмы и структуры данных осень 2013 лекция 4

Как сортировать ключи разной длинны?

* расширить алфавит пустым символом

- сложность LSD ~ максимальной длине

+ MSD сортирует только непустуе суффиксы

Page 26: Алгоритмы и структуры данных осень 2013 лекция 4

Как сортировать длинные строки?

• дорогое сравнение если строки отличаются только на конце

• много итераций LSD на длинных ключах

Page 27: Алгоритмы и структуры данных осень 2013 лекция 4

MSD sort vs QuickSort

первый бит == 1 как опорный элемент

Page 28: Алгоритмы и структуры данных осень 2013 лекция 4

Binary QuickSort

• разделим массив на две части

o с ведущим разрядом 0

o с ведущим разрядом 1ы

• рекурсивно отсортируем обе части

Page 29: Алгоритмы и структуры данных осень 2013 лекция 4

Binary quicksort

Page 30: Алгоритмы и структуры данных осень 2013 лекция 4

3-way split

Page 31: Алгоритмы и структуры данных осень 2013 лекция 4

3-way raddix quick sort

Page 32: Алгоритмы и структуры данных осень 2013 лекция 4

3-way raddix quick sort

Page 33: Алгоритмы и структуры данных осень 2013 лекция 4
Page 34: Алгоритмы и структуры данных осень 2013 лекция 4

Спасибо за внимание!

Георгий Иванов

Поиск@mail.ru