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
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