19
Анализ комбинаторных алгоритмов Лекция №7 Элементарные структуры данных Часть V

Лекция 7 Элементарные структуры данных часть 5

Embed Size (px)

Citation preview

Page 1: Лекция 7 Элементарные структуры данных часть 5

Анализ комбинаторных алгоритмов

Лекция №7Элементарные

структуры данныхЧасть V

Page 2: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

Двоичной кучей называется древовидная структура обладающая свойством упорядоченности:x->parent->key >= x->keyт.е. значение ключа ребенка не превышает значение ключа родителя.

В дереве представляющем кучу, все уровни кроме последнего заполнены полностью. Следствием этого свойства является тот факт, что высота кучи составляет log(n).

Page 3: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

14 10

9 38 7

2 4 1

16 14 10 8 7 9 3 2 4 1

Page 4: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

void Heapify(A,i){ l = i->left; r = i->right; if ((l<=heapsize(A))&&(l->key=i->key))

largest = l; else largest = i; if (r<=heapsize(A))&&(r->key > largest->key))

largest = r; if (largest != i) {

Exchange(i,largest);Heapify(A,largest);

}}

Page 5: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

4 10

9 314 7

2 8 1

Page 6: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

14 10

9 34 7

2 8 1

Page 7: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

14 10

9 38 7

2 4 1

Page 8: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

void BuildHeap(A){ heapsize(A) = length(A); for (i=heapsize(A)/2; i>=0; i-- ) Heapify(A,i);}

void HeapSort(A){ BuildHeap(A); for (i=heapsize(A)/2; i>=0; i-- ){ heapsize(A) = heapsize(A) -1; Heapify(A,1); }}

Page 9: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

14 10

9 34 7

2 8 1

Page 10: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16

14

10

9 34

7

2 8

1

Page 11: Лекция 7 Элементарные структуры данных часть 5

Двоичные кучи

16 14

10

9

34

7

2 8

1

Page 12: Лекция 7 Элементарные структуры данных часть 5

Сливаемые кучи

Сливаемая куча – это структура данных хранящая несколько множеств (куч), элементы которых называют вершинами.

Сливаемые кучи позволяют выполнить пять операций: MakeHeap – создание кучи, не содержащей элементов Insert(H,x) – добавление элемента в кучу Minimum(H) – возвращает минимальный элемент в куче ExtractMin(H) - возвращает минимальный и удаляет элемент Union(H1, H2) – сливает две кучи.

Page 13: Лекция 7 Элементарные структуры данных часть 5

Биноминальные кучи

Биноминальным деревом называется дерево с порядком на детях Bk, определяемое индуктивно.

Дерево B0 состоит из единственной вершины. Дерево Bk склеено из двух экземпляров дерева

Bk-1: корень одного из них является левым ребенком корня другого.

Page 14: Лекция 7 Элементарные структуры данных часть 5

Биноминальные кучи

Page 15: Лекция 7 Элементарные структуры данных часть 5

Биноминальные кучи

Свойства биноминального дерева (Bk) : Содержит 2k вершин. Имеет высоту k. Имеет вершин глубины i. Имеет корень степени k, все остальные

вершины – меньшей степени. Максимальная степень вершины в

биноминальном дереве с n вершинами равна log n.

ikC

Page 16: Лекция 7 Элементарные структуры данных часть 5

Биноминальные кучи

Биноминальная куча – это набор H биноминальных деревьев, в котором должны быть выполнены свойства: Каждое дерево обладает свойством кучи, т.е. ключ

каждой вершины не меньше ключа ее родителя. В H нет двух деревьев одного размера (с

одинаковой степенью корня)

Page 17: Лекция 7 Элементарные структуры данных часть 5

Фибоначчиевы кучи

Фибоначчиева куча состоит из нескольких деревьев (необязательно биноминальных) корни которых объединены в список.

В каждом дереве выполняется основное свойство кучи.

В фибоначчиевой куче дети любой вершины x объединены в циклический связанный список.

Каждая вершина имеет поле degree (степень вершины) и поле mark, истинное если вершина потеряла ребенка после того, как сделалась чьим-либо ребенком.

Page 18: Лекция 7 Элементарные структуры данных часть 5

Фибоначчиевы кучи

23 7 3 17 24

305218 38 26 46

354139

Page 19: Лекция 7 Элементарные структуры данных часть 5

Сравнительная характеристика

Двоичные Биноминальные Фибоначчиевы

MakeHeapInsertMinimumExtractMinUnionDecreaseDelete

)1()(logn

)1(

)(n)(logn

)(logn)(logn

)1()1()1(

)1()1(

)1(

)(logn

)(logn)(logn)(lognO

)(lognO)(lognO

)(lognO

)(lognO