Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Algoritmi i strukture podataka

Gomila
Sortiranje gomilom

Osnovni pojmovi

prioritetni red je struktura podataka koja donekle podsjea na obini


red
z

prioritetni red moe se prikazati na razne naine:


z
z

slinost s obinim redom je u tome to se podaci mogu dodavati (ubacivati)


u prioritetni red te skidati (izbacivati) iz njega.
razlika je u tome to se ne skida onaj podatak koji je prvi bio dodan, ve
onaj koji ima najveu vrijednost (najvei prioritet)
sortiranom vezanom listom
sortiranim binarnim stablom

najprirodniji i najuinkovitiji nain prikaza prioritetnog reda je


pomou gomile (hrpe, heap)

Gomila

gomila je potpuno binarno stablo gdje se vorovi mogu usporeivati


nekom ureajnom relacijom (npr. <=) i gdje je bilo koji vor u smislu
te relacije vei ili jednak od svoje djece (ako postoje)

75
46
13

26
31

Oblikovanje strukture gomila

najee se n elemenata sloi u gomilu, pa je najjednostavnije


koristiti potpuno binarno stablo za prikazivanje gomile, makar bi i
druga binarna stabla mogla zadovoljavati
z

z
z

to se ostvaruje ubacivanjem jednog po jednog elementa u gomilu, uvajui


svojstvo gomile
poinje se od prazne gomile
na "dno" (list) gomile dodaje se lan koji se onda usporeuje i zamjenjuje sa
svojim roditeljem, praroditeljem, prapraroditeljem itd. dok ne postane manji
ili jednak nekoj od tih vrijednosti

 GomiluStvori

Analiza najgoreg sluaja

za analizu najgoreg sluaja algoritma uzmimo n elemenata

na i-toj razini potpunog binarnog stabla ima najvie 2i-1 vorova


na svim niim razinama do tada ima ukupno 2i-1 - 1 vorova, za i > 1.
stablo s k razina ima najvie 2k-1 vorova

stablo s k-1 razinom ima najvie 2k-1-1 vorova.

z
z

ako je stablo potpuno, zapoeta je posljednja razina, pa vrijedi


2k-1 - 1 < n 2k - 1
z

iz ovoga slijedi:
2k-1 < n + 1 (k 1) log 2 < log (n + 1) k < log2 (n + 1) + 1
n + 1 2k log (n+1) k log 2 log2 (n+1) k
log2 (n+1) k < log2 (n + 1) + 1 odnosno k = log2(n+1)

Primjer

za n = 14 treba log2 15 = ln 15/ln 2 = 2.70805/0.693147 =


3.9 = 4 razine

za n = 15 treba log2 16 = 4 = 4 razine

za n = 16 treba log2 17 = 4.087 = 5 razina

Ubrzanje algoritma - I

u najgorem sluaju, petlja while izvrava se proporcionalno broju


razina u gomili
z

skup podataka koji predstavlja najgori sluaj za ovaj algoritam je polje s


rastuim podacima

tada svaki novi element, onaj koji se ubacuje u gomilu pozivom


funkcije ubaci, postaje korijen pa se kroz k razina obavlja
zamjena
vrijeme izvoenja je tada O(n log2 n)
za prosjene podatke vrijeme za stvaranje gomile iz skupa podataka
je O(n), to je za red veliine bolje

Ubrzanje algoritma - II

za poboljanje brzine obavljanja zadanih operacija stvoren je


algoritam koji kree od krajnjih vorova prema korijenu, razinu po
razinu
samo podatak u korijenu moe naruavati svojstvo gomile, dok
podstabla zadravaju to svojstvo
tada je samo potrebno tu nepravilnost ispraviti i opet dobivamo
eljenu gomilu.
z

to ini funkcija podesi u primjeru

za krajnje vorove svojstvo gomile je zadovoljeno, pa treba u


stvori_gomilu funkciji provesti popravljanje svojstva gomile samo za
korijen stabla
 GomiluPodesi

Primjer stvaranja gomile

Stvaranje gomile za ulazni niz podataka: 10,63,18,71,7,51,32


10

10

71

51

51

63

18

63

32

71

18

51

63

51

71
7

32

71

10

63

18

32

10

18

32

Ubrzanje algoritma

za n podataka, 2k-1 n < 2k , broj razina je k = log2(n+1)


za najgori sluaj broj iteracija u podesi iznosi k-i za vor na
razini i gdje ima najvie 2i-1 vorova
z

vrijeme izvoenja za stvori_gomilu je:


k

i 1
2
(k i )

eksponent se mijenja od 0 do k -1,


i =1
a faktor od k -1 do 0
slijedi ekvivalentni izraz kad se izbaci faktor 0 i obrne redoslijed sumacije:
k 1

i 2
i =1

k i 1

k 1

= 2

k 1

i =1

2k-1 n

k 1

i
i 2 n i 2n = O ( n)
i =1 2
i

suma reda tei


prema 2

Ubrzanje algoritma

vrijeme izvoenja za najgori sluaj algoritma stvori_gomilu


je O(n), to je za red veliine bolje od O(n log2 n) za uzastopno
koritenje funkcije ubaci
funkcija stvori_gomilu trai da su svi elementi za stvaranje
gomile ve prisutni, dok ubaci moe ubaciti novi element u gomilu
bilo kada
z

funkcije koje gomila treba brzo obaviti i radi kojih je napravljena ta struktura
podataka su ubacivanje novih i brisanje najveeg elementa iz skupa
podataka
brisanje najveeg podatka obavlja se izbacivanjem korijena i pozivanjem
funkcije podesi, a ubacivanje novih radi se funkcijom ubaci
-

tako se postie da se obje eljene funkcije obavljaju u vremenu O(log2 n)

Ubrzanje algoritma

gomila moe biti napravljena za razne relacije njenih elemenata


z
z

gomilu s relacijom vei od zovemo max heap


gomilu s relacijom manji od zovemo min heap

Sortiranje gomilom

heap sort:
z element s vrha gomile zamjenjuje se s posljednjim elementom

polja
z gomila se skrauje za 1 element i podeava

sloenost podeavanja je O(log2n)


to se obavlja n puta pa je sloenost sorta O(nlog2n)

razlika u vremenu izvoenja za razliite redove veliine


sloenosti postane znaajna za veliki n
 Sortovi

Zadaci za vjebu

Zadan je niz ulaznih podataka:

12, 15, 5, 3, 7, 2 18, 11, 4, 10


a)
b)
c)

treba nacrtati potpuno binarno stablo koje je nastalo slijednim upisom


ulaznih podataka
treba nacrtati podatkovnu strukturu gomila u koju su pohranjeni ulazni
podaci
koliko iznosi apriorno vrijeme izvoenja za pretvorbu potpunog binarnog
stabla u strukturu gomila?

Zadaci za vjebu

Zadan je niz ulaznih podataka tipa int:

12, 5, 4, 10, 7, 8 11
a)
b)

c)

treba nacrtati stablo koje predstavlja strukturu gomila, takvu da omoguuje


rjeenje zadatka pod b)
treba ilustrirati kako radi silazno sortiranje koritenjem strukture gomila
(heap sort)
koliko je apriorno vrijeme potrebno za sortiranje n podataka?

Zadaci za vjebu

Napisati program koji e u cjelobrojnom polju od n lanova pronai


k-ti najvei lan polja.
a)
b)

c)

Uitano polje sortirati po padajuim vrijednostima i ispisati lan s


indeksom k-1.
Uitati k lanova polja, sortirati ih po padajuim vrijednostima. Uitavati
preostale lanove polja. Ako je pojedini lan manji od onoga s indeksom
k-1, ignorirati ga, ako je vei umetnuti ga na pravo mjesto, a izbaciti lan
polja koji bi sad imao indeks k.
Varirati postupke sortiranja te odrediti pripadna apriorna vremena i
izmjeriti aposteriorna vremena izvoenja.

Odrediti apriorna vremena trajanja, a izmjeriti aposteriorna


vremena. Varirati postupak sortiranja.

You might also like