Кучи
Бинарные кучи (пирамиды)
Полная пирамида при n=15
Пример полной пирамиды при n =12
Основные операции над элементами пирамиды
Свойство пирамиды
Операция вставки
Extract_Max() – O(log2 N)
Sift_Down(A, i)
Пирамидальная сортировка
Идея метода пирамидальной сортировки
1 этап: построение пирамиды
Анализ Build_Max_Heap
Построение пирамиды
Алгоритм пирамидальной сортировки
Анализ
Сортировка на пирамиде (продолжение примера)
Сортировка на пирамиде (продолжение примера)
Сортировка на пирамиде (продолжение примера)
Очереди с приоритетами
Реализация очереди с приоритетами с помощью пирамиды
Реализация очереди с приоритетами с помощью пирамиды (продолжение)
Вставка элемента в очередь
Пример: увеличение ключа
K-ичные кучи
Операции на k-ичных кучах
Биномиальные деревья
Свойства биномиальных деревьев
Примеры
Биномиальная куча
Пример биномиальной кучи
Реализация биномиальных куч
Операции над биномиальными пирамидами
3. Слияние двух биномиальных куч
Объединение биномиальных куч
Пример
Пример, продолжение
Пример, окончание
Вставка в биномиальную кучу
Извлечение вершины с минимальным ключом
Пример, начало
Пример, окончание
Уменьшение ключа
Пример
Удаление ключа
Левацкие кучи
Свойства левацких куч
Слияние левацких куч
Слияние левацких куч
Операции
Косые кучи (Skew Heaps)
Пример
Слияние косых куч
Фибоначчиевы кучи
1.45M
Category: programmingprogramming

Кучи. Пирамиды (бинарные кучи)

1. Кучи

Пирамиды (бинарные кучи)
Пирамидальная сортировка
K-ичные кучи
Биномиальные кучи
Левацкие кучи
Косые кучи

2. Бинарные кучи (пирамиды)

Пирамида – это структура данных,
представляющая собой объект-массив,
который можно рассматривать как почти
полное бинарное дерево

3. Полная пирамида при n=15

Пусть дан массив элементов h[1..15]
Полная пирамида может быть изображена в виде корневого бинарного
дерева, в котором элементы h2i и h2i+1 являются сыновьями элемента hi.
Элемент в любом узле численно не меньше всех своих потомков, а
вершина полной пирамиды h1 содержит максимальный элемент всей
последовательности.
h1
h2
h4
h8
h3
h5
h9
h10
h6
h11
h12
h7
h13 h14
h15

4. Пример полной пирамиды при n =12

Если число элементов в полной пирамиде не равно 2k – 1, самый нижний
уровень дерева будет неполным: недостающих сыновей можно
достроить, добавив в пирамиду несколько заключительных
«минимальных» элементов «0», не нарушающих условия пирамиды.
Последовательность, упорядоченная по убыванию, является полной
пирамидой.
Например, последовательность из 12 элементов
12, 11, 7, 8, 10, 6, 3, 2, 1, 5, 9, 4
является полной пирамидой с вершиной 12.
12
11
8
2
7
10
1
5
6
9
4
3
0
0
0

5. Основные операции над элементами пирамиды

Пусть А – массив, на котором построена куча (пирамида)
length[A]
– количество элементов массива
heap_size[A] – количество элементов пирамиды,
содержащиеся в массиве А
Parent(i)
return i/2
Left(i)
return 2i
Right(i)
return 2i+1

6. Свойство пирамиды

Свойство невозрастающих пирамид (max-heap property)
A[Parent( i )] ≥ A[ i ]
Свойство неубывающих пирамид (min-heap property)
A[ Parent( i )] ≤ A[ i ]

7. Операция вставки

Heap_Insert (x)
heap_size[A] heap_size[A]+1;
i heap_size[A]
A[i] x
Sift_Up (i)
Sift_Up(i)
if i = 1 return
if A[i] > A[Parent(i)]
Swap(i, Parent(i))
Sift_Up (Parent(i))

8. Extract_Max() – O(log2 N)

9. Sift_Down(A, i)

l Left(i)
r Right(i)
if l ≤ heap_size[A]
then largest
else largest
if r ≤ heap_size[A]
then largest
if largest ≠ i
и A[l] > A[i]
l
i
и A[r] > A[largest]
r
then Обменять А[i] ↔ A[largest]
Sift_Down(A, largest)

10. Пирамидальная сортировка

При сортировке методом простого выбора на каждом шаге выполняется
линейный поиск минимального элемента. Линейная сложность этого
поиска делает сложность всей сортировки квадратичной.
Возможно ли найти минимальный элемент за время лучшее линейного?
Оказывается, что это возможно, если использовать на каждом
следующем шаге информацию о взаимных отношениях элементов,
накопленную на предыдущих шагах.
Идея бинарного выбора может быть эффективно применена, если
организовать входные данные в виде так называемой пирамиды
(или сбалансированного бинарного дерева поиска) и поддерживать
их в этом виде в процессе сортировки.
Метод сортировки с использованием такой пирамиды был предложен Р.
У. Флойдом в 1964 г. под названием «Heap sort» — пирамидальной
сортировки или сортировки кучей.

11.

Роберт В Флойд
Robert W Floyd
Флойд в 1976 году
Дата рождения:
8 июля 1936
Место рождения:
Нью-Йорк
Дата смерти:
25 сентября 2001 (65 лет)
Место смерти:
Стэнфорд
Страна:
США
Научная сфера:
Информатика
Место работы:
Университет Карнеги — Меллон
Стэнфордский университет
Альма-матер:
Чикагский университет
Известен как:
Алгоритм Флойда — Уоршелла
Награды и премии Премия Тьюринга, Медаль
«Пионер компьютерной техники»
(1991)

12. Идея метода пирамидальной сортировки

1.
2.
Подготовка к сортировке: входная неупорядоченная
последовательность перестраивается в пирамиду.
Сортировка: входная и готовая последовательности хранятся в
одном массиве, причем готовая последовательность
формируется в хвосте массива, а входная остается в начале
массива.
1 этап: построение пирамиды
2 этап: сортировка на пирамиде

13. 1 этап: построение пирамиды

Build_Max_Heap(А)
heap_size[A] length[A]
for i length[A] / 2 downto 1
do Sift_Down(A, i)

14. Анализ Build_Max_Heap

Т.к. высота n-элементной пирамиды = log2 n
а на высоте h находится не более n/2h+1 узлов, то
log2
English     Русский Rules