Professional Documents
Culture Documents
ASP Vezbe 08
ASP Vezbe 08
MAŠINSKI FAKULTET
mrosic@mas.bg.ac.rs
HEAP
Heap je struktura podataka u vidu stabla.
2
OSOBINA HEAP-a
Čvor stabla koji predstavlja roditelja mora imati
veću vrednost od svih svojih levih i desnih potomaka.
8 3 8 12 8 14
Plavi čvor Plavi čvor Plavi čvor nema
poseduje osobinu poseduje osobinu osobinu heap-a
heap-a heap-a
3
OSOBINA HEAP-a
Ukoliko neki čvor stabla ne poseduje osobinu
heap-a potrebno je izvršiti zamenu sa potomkom koji
poseduje veću vrednost.
12 14
8 14 8 12
Plavi čvor nema Plavi čvor
osobinu heap-a poseduje osobinu
heap-a
4
KONSTRUKCIJA HEAP-A
Heap se pravi dodavanjem čvorova jedan za drugim.
Dodavanje Dodavanje
novog čvora novog čvora
5
KONSTRUKCIJA HEAP-A
6
KONSTRUKCIJA HEAP-A
8 8 10 10
10 8 8 5
1 2 3
10 10 12
8 5 12 5 10 5
12 8 8
4
7
PRIMENA HEAP-a
Prioriteni red može se implementirati pomoću
različitih struktura podataka, jedna od implementacija
je pomoću heap-a, koji je sortiran po određenom
prioritetu.
8
PRIMER PRIORITETAN RED
25
22 17
19 22 14 15
18 14 21 3 9 11
11
22 17
19 22 14 15
18 14 21 3 9 11
10
PRIMER PRIORITETAN RED
Primenjuje se zamena sa prvim većim potomkom.
11
22 17
19 22 14 15
18 14 21 3 9
11
PRIMER PRIORITETAN RED
Primenjuje se zamena sa većim potomkom.
22
11 17
19 22 14 15
18 14 21 3 9
12
PRIMER PRIORITETAN RED
Primenjuje se zamena sa većim potomkom.
22
22 17
19 11 14 15
18 14 21 3 9
13
PRIMER PRIORITETAN RED
Ponovo smo dobili heap, koji ujedno predstavlja i
prioritetni red.
22
22 17
19 21 14 15
18 14 11 3 9
14
SORTIRANJE
Kako heap predstaviti pomoću niza?
0 25
1 2
22 17
3 4 5 6
19 22 14 15
7 8 10
9 11 12
18 14 21 3 9 11
0 1 2 3 4 5 6 7 8 9 10 11 12
25 22 17 19 22 14 15 18 14 21 3 9 11
0 1 2 3 4 5 6 7 8 9 10 11 12
25 22 17 19 22 14 15 18 14 21 3 9 11
0 1 2 3 4 5 6 7 8 9 10 11 12
11 22 17 19 22 14 15 18 14 21 3 9 25
16
SORTIRANJE
Posle zamene narušeno je svojstvo heap-a. Da bi dobili
sortirani niz pri svakoj zameni moramo prvo da uredimo ostatak
niza u heap, pa onda da vršimo zamenu, sve dok ne dobijemo
sortiran niz.
0 1 2 3 4 5 6 7 8 9 10 11 12
11 22 17 19 22 14 15 18 14 21 3 9 25
0 1 2 3 4 5 6 7 8 9 10 11 12
22 22 17 19 21 14 15 18 14 11 3 9 25
0 1 2 3 4 5 6 7 8 9 10 11 12
9 22 17 19 21 14 15 18 14 11 3 22 25 17
SORTIRANJE
3
def swap(i, j):
heap[i], heap[j] = heap[j], heap[i]
1 if __name__ == '__main__':
heap = [25, 22, 17, 19, 22, 14, 15, 18, 14, 21, 3, 9, 11]
heap_sort()
print(heap)
SORTIRANJE
2def heapify(i, end):
left = 2 * i + 1
right = 2 * i + 2
max_index = i
if max_index != i:
swap(i, max_index)
heapify(max_index, end)
def heap_sort():
end = len(heap)
start = end // 2 - 1