9. Приоритетна опашка - втора част

Структура от данни хип
Реализация на приоритетна опашка с хип
Представяне на хип с вектор
Вмъкване на елемент в хипа
Премахване на елемент от хипа
C++ реализация
Сортиране с хип


Структура от данни хип

Твърдение: Хип T съдържащ n ключа има височина h = [log(n + 1)].
Доказателство: (прилагаме свойството пълно двоично дърво)




Реализация на приоритетна опашка с хип

 

Представяне на хип с вектор


template <typename E>
class VectorCompleteTree {

//... insert private member data and protected utilities here

public:
VectorCompleteTree() : V(1) {}  // constructor

int size() const
{ return V.size() − 1; }

Position left(const Position& p)
{ return pos(2*idx(p)); }

Position right(const Position& p)
{ return pos(2*idx(p) + 1); }

Position parent(const Position& p)
{ return pos(idx(p)/2); }

bool hasLeft(const Position& p) const
{ return 2*idx(p) <= size(); }

bool hasRight(const Position& p) const
{ 2*idx(p) + 1 <= size(); }

bool isRoot(const Position& p) const
{ return idx(p) == 1; }

Position root()
{ return pos(1); }

Position last()
{ return pos(size()); }

void addLast(const E& e)
{ V.push back(e); }

void removeLast()
{ V.pop back(); }

void swap(const Position& p, const Position& q)
{ E e = *q; *q = *p; *p = e; }

A vector-based implementation of the complete tree ADT.

Вмъкване




"Бълбукане нагоре" след вмъкване




Премахване


"Бълбукане надолу" след премахване



Анализ

Function
Time
size(), isEmpty()
O(1)
minElement(), minKey()
O(1)
insertItem(k,e)
O(log n)
removeMin()
O(log n)

C++ реализация

Интарфейс на класа HeapTrеe  html-7.7 (HeapTree) с използване на йерархията на интерфейса за двоично дърво АДТ.

html-7.8 (HPQ1)
html-7.9 (HPQ2)

VisoAlgo

Heap Visualization


Сортиране с хип

HeapSort