Transcript
Page 1: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Хакасский государственный университет им. Н.Ф. Катанова

Структуры и алгоритмы обработки данных

Лекция: Сортировка. Часть №2.

Николай Гребенщиков, www.grebenshikov.ru

Page 2: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Сортировка с разделением (быстрая сортировка)

1. Разделяем массив на два подмассива [1 . . . m] и [m + 1 . . . N ],причем ∀i, j : 1 ≤ i ≤ m ∧m < j ≤ N ⇒ ai ≤ aj

2. Рекурсивно сортируем получившиеся два подмассива.

m называется медианой.

1

Page 3: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм быстрой сортировки

QuickSort(A, p, r)

1 if p < r

2 then q ← Partition(A, p, r)

3 Quicksort(A, p, q − 1)

4 Quicksort(A, q + 1, r)

2

Page 4: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм разделения в быстрой сортировке

Partition(A, p, r)

1 x← A[r]

2 i← p− 1

3 for j ← p to r − 1

4 do if A[i] ≤ x

5 then i← i + 1

6 Обменять A[i]↔ A[j]

7 Обменять A[i + 1]↔ A[r]

8 return i + 1

3

Page 5: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Алгоритм быстрой сортировки на С

4

Page 6: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Работа быстрой сортировки (1 из 2)

5

Page 7: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Работа быстрой сортировки (2 из 2)

6

Page 8: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ быстрой сортировки (наихудший случай)

Предположим, что все элементы различны.

Наихудший случай: когда при разделении один из массивовне имеет элементов.

T (n) = T (0) + T (n− 1) + Θ(n)= Θ(1) + T (n− 1) + Θ(n)= T (n− 1) + Θ(n)= Θ(n2)

C(N) = M(N)

7

Page 9: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ быстрой сортировки (наихудший случай)

T (n) = Θ(n∑

k=1

c · k) + n ·Θ(1) = Θ(n2 + n) = Θ(n2)

8

Page 10: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ быстрой сортировки (наилучший случай)

Наилудший случай: когда при разделении массив разделяет-ся на равные части.

T (n) = 2T (n/2) + Θ(n)= Θ(n · log(n))

9

Page 11: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Рандомизированная быстрая сортировка

• Время работы не зависит от порядка элементов во вход-ных данных.

• Не нужно предположений о распределении входных дан-ных.

• Нет входных данных, которые приводят к наихудшемуслучаю.

• Наихудший случай определяется только генератором слу-чайных чисел.

10

Page 12: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Рандомизированная быстрая сортировка

Выбираем граничный элемент случайным образом!

RandomizedPartition(A, p, r)

1 i← Random(p, r)

2 Обменять A[r]↔ A[i]

3 return Partition(A, p, r)

RandomizedQuickSort(A, p, r)

1 if p < r

2 then q ← RandomizedPartition(A, p, r)

3 RandomizedQuicksort(A, p, q − 1)

4 RandomizedQuicksort(A, q + 1, r)

11

Page 13: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ рандомизированной быстрой сортировки

T (n) = функция имеющая случайный характер. Пусть выборэлемента разделения осуществляется независимым образом.

Введем случайный индикатор: Xk =

1, разделение(k : n− k − 1)

0, иначе

E[Xk] = 0 · Pr {Xk = 0}+ 1 · Pr {Xk = 1} = Pr {Xk = 1} = 1n

12

Page 14: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ рандомизированной быстрой сортировки

T (n) =

T (0) + T (n− 1) + Θ(n), разделение(0 : n− 1)

T (1) + T (n− 2) + Θ(n), разделение(1 : n− 2)

. . .

T (n− 1) + T (0) + Θ(n), разделение(n− 1 : 0)

=n−1∑k=0

Xk(T (k) + T (n− k − 1) + Θ(n))

13

Page 15: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ рандомизированной быстрой сортировки

E[T (n)] = E[n−1∑k=0

Xk(T (k) + T (n− k − 1) + Θ(n))]

= E[Xk] · E[n−1∑k=0

T (k) + T (n− k − 1) + Θ(n))]

=1

n

n−1∑k=0

E[T (k)] +1

n

n−1∑k=0

E[T (n− k − 1)] +1

n

n−1∑k=0

Θ(n)

=2

n

n−1∑k=0

E[T (k)] + Θ(n)

=2

n

n−1∑k=2

E[T (k)] + Θ(n)

14

Page 16: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ рандомизированной быстрой сортировки

Докажем, что E[T (n)] ≤ a · n · log(n), для a− const, a > 0.

Базовый шаг: выберем a, что E[T (n)] ≤ a · n · log(n) длямалого n.

Используем факт, чтоn−1∑k=2

k · log(k) ≤1

2n2log(n)−

1

8n2

15

Page 17: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Анализ рандомизированной быстрой сортировки

Подстановка:

E[T (n)] ≤2

n

n−1∑k=2

a · k · log(k) + Θ(n)

≤2a

n(1

2n2log(n)−

1

8n2) + Θ(n)

= a · n · log(n)− (a · n

4−Θ(n))

≤ a · n · log(n), еслиa · n

4> Θ(n)

16

Page 18: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Наименьшее время сортировки

Теорема. В любом алгоритме, упорядочивающем с помо-щью сравнения пар, на упорядочивание последовательностииз N элементов тратится не меньше c · N · log2N сравненийпри c = 0 и N →∞.

T (n) > c ·N · log2N , при c = 0 и N →∞

17

Page 19: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Наименьшее время сортировки. Доказательство

Число перестановок последовательности из N элементов рав-но N !.

Сортировка путем сравнения пар есть спуск по дереву ре-шений - двоичному, где листья перестановки, а внутренниеузлы условия.

18

Page 20: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Дерево решений сортировки для последовательностииз 3-х элементов

19

Page 21: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Наименьшее время сортировки. Доказательство

N ! ≥(

N2

N2

)

h ≥ log2(N !) ≥ N2 log2

N2 ≥

N4 log2N

20

Page 22: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

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

• Все n входных элементов - целые числа, пренадлежащие[0, k], где k - целая константа.

• Если k = O(n), то T (n) = Θ(n)

21

Page 23: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

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

CountingSort(A, B, k)

1 for i← 0 to k

2 do C[i]← 0

3 for j ← 1 to length[A]

4 do C[A[j]]← C[A[j]] + 1

5 � В C[i] хранится количество элементов равных i

6 for i← 1 to k

7 do C[i]← C[i] + C[i− 1]

8 � В C[i] хранится количество элементов не превышающих i

9 for j ← length[A] downto 1

10 do B[C[A[j]]]← A[j]

11 C[A[j]]← C[A[j]]− 1

22

Page 24: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

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

Визуализация?

23

Page 25: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

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

На семинар:

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

• Карманная сортировка

24

Page 26: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

Список литературы

• Цикова В.А., Чурина Т.Г. Методы программирования: пе-рестановки, поиск и сортировка: Учеб. пособие / Ново-сиб. гос. ун-т. Новосибирск, 2006. Ч.2. 58 с. сс.42-47.

• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных иалгоритмы. - М. : Издательский дом “Вильямс”, 2000.сс.235-257.

• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.198-239.

25

Page 27: Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки данных"

• Кнут Д, Искусство программирования, том 3. Сортировкаи поиск, 2-е изд. - М. : Издательский дома “Вильямс”,2000. сс.192-203.


Recommended