Вы находитесь на странице: 1из 13

Министерство Образования и Исследований

Республики Молдова
Технический Университет Молдовs

Отчет
по лабораторной работе Nr.3.
Analiza şi proiectarea algoritmilor
Тема: Организация очереди с приоритетом с помощью кучи

Вариант 17

Выполнил ст.гр. TI-2210 Шологан Артемиос


Проверил ассист.универ.

Кишинев – 2023

Цель:Изучение основного свойства кучи, ее построение и сортировка.


Организация очереди с приоритетом с помощью кучи.
Вариант:

Псевдокод (HEAPIFY);
HEAPIFY(A, i):

1. l ← left(i)
2. r ← right(i)
3. If l<=heapSize[A] & A[l] > A[i]
4. then largest← l
5. else largest[A]← i
6. If r<=heapSize[A] & A[r] > A[largest]
7. then largest← r
8. If largest ≠ i
9. then A[i]← A[larget]
10. HEAPIFY(A, larget):
HEAPSORT(A)
1. BUILD-HEAP(A)
2. for i←length[A] down to 2
3. do A[1]←A[1]
4. heapSize[A]←heapSize[A]-1
5. HEAPIFY(A,1)
Function HEAP-EXTRACT-MAX(A):
1. if heapSize(A) < 1:
2. raise error "Очередь пуста "
3. max ← A[1]
4. A[1] ← A[heapSize]
5. A[heapSize] ←A[heapSize]-1
6. HEAPIFY(A,1)
7. return max
HEAP-INSERT(A, key)
1. heap-size [A]←heap-size [A] + 1
2. i←heap-size [A]
3. while i > 1 и A [PARENT(i)] < key
4. do A[i]←A [PARENT(i)]
5. i←PARENT(i)
6. A[i]←key

Реализация алгоритма построения кучи :

build_heap(A)
Начальное дерево :
0 1 2 3 4 5 6 7 8 9 10
83 3 42 31 84 89 5 73 46 8 2

def heap_insert(A, key):


1.1 A.append(float("-inf")) A[11]=-Infinity
2.1 heap_increase_key(A, len(A) - 1, key)
def heap_increase_key(A, i, key):
1.2 if key < A[i]: key=50 i=11
1.4 A[i]←key=50
1.5 while i > 0 and A[parent(i)] < A[i]: False i=11 parent(i)=[(i - 1) // 2]=5
Откуда видно, что HEAP-SRORT - самый эффективный (если учитывать
затрачиваемую память).

Вам также может понравиться