31.12.2014 Views

Seminarski rad: UĊenje algoritama u Pythonu - phy.hr - Prijava

Seminarski rad: UĊenje algoritama u Pythonu - phy.hr - Prijava

Seminarski rad: UĊenje algoritama u Pythonu - phy.hr - Prijava

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

može biti fiksno učinkovito u O(lg h) vrijeme pozivom Heapify bez mogućnosti obnavljanja u<br />

gomili O(h) na vrijeme.<br />

Jedna od razlika je da algoritam u udžbeniku poprima 1-na<br />

temelju niza pokazatelja,dok Python pretpostavlja 0-temeljen polja. Python kod je:<br />

def Parent(i): return i/2<br />

def Left(i): return 2*i<br />

def Right(i): return 2*i+1<br />

def Heapify(A, i, n): # A is "almost a heap" (except root); fix it so all of A is a heap<br />

l = Left(i)<br />

r = Right(i)<br />

if l A[i]: largest = l<br />

else: largest = i<br />

if r A[largest]:<br />

largest = r<br />

if largest != i:<br />

A[i], A[largest] = A[largest], A[i]<br />

Heapify(A, largest, n)<br />

def HeapLength(A): return len(A)-1<br />

def BuildHeap(A): # build a heap A from an unsorted array<br />

n = HeapLength(A)<br />

for i in range(n/2,0,-1):<br />

Heapify(A,i,n)<br />

def HeapSort(A): # use a heap to build sorted array from the end<br />

BuildHeap(A)<br />

HeapSize=HeapLength(A)<br />

for i in range(HeapSize,1,-1):<br />

A[1],A[i]=A[i],A[1] # largest element is a root of heap, put it at the end of array<br />

HeapSize=HeapSize-1 # s<strong>hr</strong>ink heap size by 1 to get next largest element<br />

Heapify(A,1,HeapSize)<br />

Gomila i prioritet redovi su usko povezani, jer gomila može implementirati prioritetne redove<br />

učinkovito sa O(lg n)-vrijeme umetanja i vaĎenja. Jedna od razlika je, meĎutim,<br />

dinamička memorija upravljanja: u gomilu vrsta, veličina polja ostaje ista, dok u prioritet<br />

redovima veličina reda raste i smanjuje. Koristimo ovu priliku da se uvedu dvije konstrukti.<br />

Prvo, mi pokazuju da A.append () i A.pop () može se koristiti za rast i smanjiti liste A, dok<br />

su len (A) vraća trenutnu duljinu popisa. Drugo, u slučaju ispod granice (i prelijevanje po<br />

želji), pokazuju studentima kako podići i uhvatiti izuzetak. Ovi konstrukti ne mogu biti<br />

jedinstveni za Python, no Python olakšava eksperiment.<br />

4. Binarna stabla i Huffman kodiranje<br />

Huffman algoritam proizvodi prefiks-free, promjenjive duljine kodne riječi na<br />

temelju frekvencije svakog lika. Često se koriste slova kodirana pomoću kraćeg niza<br />

bitova, a manje često korištenih pomoću dužeg niza<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!