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
Seminarski rad: Učenje algoritama u Pythonu Autor izvornog teksta koji sam koristio: Pai H. Chou (University of California, Irvine) U kojoj mjeri je Python pogodan za učenje izrade algoritama Ž e l j k o Č e j v a n o v i ć P r o f . F i z i k e i T e h n i k e , F - 3 2 4 5 3 . g o d . z e l j k o c e j @ g m a i l . c o m 5 / 3 / 2 0 1 1
- Page 2 and 3: Sadržaj: 0. Sažetak..............
- Page 4 and 5: Neki instruktori pokušavaju ublaž
- Page 6 and 7: može biti fiksno učinkovito u O(l
- Page 8 and 9: Ako smo za provedbu ovog s tradicio
- Page 10: podataka se može ispitati samo tak
<strong>Seminarski</strong> <strong>rad</strong>:<br />
Učenje <strong>algoritama</strong> u<br />
<strong>Pythonu</strong><br />
Autor izvornog teksta koji sam koristio: Pai H.<br />
Chou (University of California, Irvine)<br />
U kojoj mjeri je Python pogodan za učenje iz<strong>rad</strong>e<br />
<strong>algoritama</strong><br />
Ž e l j k o Č e j v a n o v i ć<br />
P r o f . F i z i k e i T e h n i k e , F - 3 2 4 5<br />
3 . g o d .<br />
z e l j k o c e j @ g m a i l . c o m<br />
5 / 3 / 2 0 1 1
Sadržaj:<br />
0. Sažetak.......................................................................................2<br />
1. Uvod............................................................................................2<br />
2. Uvodna lekcija: Sortiranje............................................................3<br />
3. HeapSort (gomila) poredaj i prioritet redovi.................................4<br />
4. Binarna stabla i Hufmann kodiranje............................................5<br />
5. Grafikon Algoritmi........................................................................7<br />
6. Zaključak i zašto je Python pogodan za učenje iz<strong>rad</strong>e<br />
<strong>algoritama</strong>!.................................................................................9<br />
7. Literatura.....................................................................................9<br />
1
Sažetak<br />
Dizajn i analiza <strong>algoritama</strong> su temeljne teme u računalnoj znanosti i obrazovanju na<br />
tehničkim fakultetima. Mnogi tečajevi <strong>algoritama</strong> uključuju programske zadatke kako bi<br />
učenici bolje razumjeli algoritme. Nažalost, korištenje t<strong>rad</strong>icionalnih programskih jezika<br />
prisiljava studente da se bave detaljima strukture podataka i prateće rutine, a ne dizajnom<br />
<strong>algoritama</strong>. Python predstavlja algoritam-orijentirani jezik<br />
koji je jako potreban u<br />
obrazovanju. Prednosti Pythona su njegovi udžbenici poput sintakse i interaktivnost<br />
koja potiče eksperimentiranje. Još važnije, Python se može koristiti za<br />
zastupanje agregatne strukture podataka kao što su grafovi i mreže protoka u sažetom<br />
tekstualnom obliku, koji ne samo da potiče studente da eksperimentiraju s algoritmima,<br />
ali takoĎer dramatično smanjuje vrijeme razvoja. Ove značajke su provedene u studiju<br />
<strong>algoritama</strong> naravno s uspješnim rezultatima.<br />
1. Uvod<br />
Algoritmi su najvažniji alati za svakoga tko mora riješiti probleme pisanja računalnih<br />
programa. Algoritmi se koriste ne samo od strane računalnih znanstvenika i inženjera<br />
računala, nego i mnogi u drugim inženjerskim disciplinama i znanosti. Kao rezultat toga,<br />
studenti raznih smjerova koriste tečajeve <strong>algoritama</strong>.<br />
Iako je moguće proučavati algoritme samo čitajući knjige i gledajuće rješene primjere, učenici<br />
će ih najbolje shvatiti tako da sami provedu neki algoritam. Kao rezultat toga, to<br />
nije neuobičajeno za tečajeve <strong>algoritama</strong><br />
da uključuju programske<br />
zadatke. Udžbenici koji uključuju programiranje kao sastavni dio algoritma obrazovanja<br />
takoĎer su od autora tražili da zadovolji taj zahtjev [4]. Gotovo svi tečajevi i udžbenici su se<br />
do sada provodili u t<strong>rad</strong>icionalnim jezikom kao što su C ili C+ + i Java (nedavno je<br />
stekao popularnost) [5]. Argument za korištenje tih jezika je uglavnom praktična, jer su<br />
studenti vjerojatno već iskusni u tim jezicima i to im daje praktične vještine.<br />
1.1 Programiranje vs Algoritam Design (dizajn <strong>algoritama</strong>)<br />
Nažalost, iskustva su pokazala da programski zadaci u klasi algoritma ne moraju uvijek<br />
biti pedagoški korisni. Iako je većina <strong>algoritama</strong> od nekoliko redaka do pola<br />
stranice u udžbeniku, njihove implementacije često zahtijevaju stotine redaka u C-u<br />
ili Javi. Jedan od razloga je da ti jezici zahtijevaju deklaraciju globalnih varijabli,<br />
lokalne varijable i parametre prije nego što oni mogu koristiti. Drugi razlog, što je još<br />
važnije, je da su mnogi strukturama podataka kao što su popisi, povezane strukture<br />
podataka, kao i specijalizirana polja moraju biti projektirani i izvedeni za podršku<br />
<strong>algoritama</strong>, i složenost ovih vježbi brzo raste kad agregatne strukture podataka kao što<br />
su grafikoni ili protok mreža uključeni. U stvari, većina objektno orijentiranih programera će<br />
potrošiti većinu svojih napora u projektiranju klase i sučelja, i trošiti relativno<br />
malo vremena za punjenje u kodu za metode. Kao rezultat toga, ovi zadaci za<br />
programiranje će prisiliti studente da provedu mnogo vremena uz pitanja o<br />
programiranju, nego pitanjima za algoritme. Zbog ovoga bi mogli imati problema studenti koji<br />
nisu informatićkog smjera.<br />
2
Neki instruktori pokušavaju ublažiti ovaj teret dajući studentima knjižicu rutine za strukture<br />
podataka. MeĎutim, još<br />
uvijek<br />
postoje mnogi problemi koji su svojstveni ovim jezicima, uključujući ulaz/izlaz i ponovno. Npr.<br />
, biblioteka može pružiti API za izg<strong>rad</strong>nju stabla ili grafa zazivajući algoritam iz strukture<br />
podataka. Studenti moraju shvatiti njihov slučaj uzastopna poziva na dodavanje<br />
jednog čvora na vrijeme graf, ili pročitati opis grafikona iz datoteke. Bivši pristup može<br />
biti neugodan, jer izvorni kod ne sliči strukturi podataka, ali smisao je vezan za API.<br />
Potonji pristup, koji koristi prilagoĎeni jezik za zastupanje graf, može biti više koncizan,ali to<br />
zahtijeva vježbanje rutine, što može smanjiti ponovnu uporabu i proširivost. Znaći, kada<br />
shvatimo graf, možemo mijenjati neke postavke kako bi ga promijenili.<br />
1.2 Python Edge (rub)<br />
Python adrese tih problema i čini uvjerljiv jezik za algoritme obrazovanje. Prvo, njegove<br />
uvlake-based sintaksa je toliko slična većini udžbenika da čak i studenti, bez puno<br />
programiranja nemaju problema kodiranja <strong>algoritama</strong> samo slijedeći<br />
knjigu. Zbog<br />
toga, popularnost s drugim jezicima je dvojbena, osobito s obzirom na činjenicu da<br />
njegov interaktivni način potiče studente da eksperimentiraju s njim bez dugog<br />
ciklusa. Drugo, Python pruža temeljne strukture podataka kao što su popisi, torke, rječnici i<br />
može se koristiti izravno algoritmima. Čak je i složenija struktura podataka kao što<br />
su drveće i grafikoni sažeti u čitljivom obliku.<br />
Postoji nekoliko prednosti: test slučajeva za algoritme mogu biti<br />
napisani<br />
direktno u <strong>Pythonu</strong> bez poziva svih podataka, strukturu izg<strong>rad</strong>nje API, i bez da se oslanjaju<br />
na bilo koji konvertor. U bilo kojem trenutku, podatkovne strukture mogu se takoĎer<br />
prikazati u tekstualnom obliku koji je čitljiv za ljude i za Python.<br />
2. Uvodna Lekcija: Sortiranje<br />
Većina udžbenika poćinje sa sortiranjem kao način da uvedu algoritme i složene analize.<br />
Naša strategija je da prikažemo algoritme rame uz rame s Python kodom kako bi pokazali<br />
njihovu sličnost. Mi smo započeli s InsertionSort, koja kao rezultat prikazuje niz s desna na<br />
lijevo:<br />
Algoritam iz udžbenika [1]<br />
Insertion-Sort(A) (umetanje-poredaj)<br />
1 for j
Python kod<br />
def InsertionSort(A):<br />
for j in range(1, len(A)):<br />
key = A[j]<br />
i = j - 1<br />
while (i >=0) and (A[i] > key):<br />
A[i+1] = A[i]<br />
i = i - 1<br />
A[i+1] = key<br />
Kada učenici vide sličnost, većina njihovog straha prema programiranju jednostavno nestaje.<br />
Ona takoĎer pomaže da pokažu interaktivne prirode Python. Mi koristimo računalo-projektor i<br />
zapravo tip u programu, što je samo 8 linija dugo. Najbolji<br />
dio je, možemo<br />
testirati algoritam jednostavno, upišete u slučaju teksta u obliku popisa:<br />
>>> x = [2,7,3,8,1] # create test case (stvoriti test slučaj)<br />
>>> InsertionSort(x) # call routine (poziva rutinu)<br />
>>> x # look at result (pogled na rezultat)<br />
[1, 2, 3, 7, 8]<br />
U smislu, Python daje udžbenik važnosti jer algoritmi predstavljaju<br />
u<br />
udžbeniku nisu višesamo pseudocode ili koraka teorijskih interesa samo, mogu vidjeti kako<br />
se lako ga jezapravo izvršiti algoritme koristeći podatke koje oni generiraju. U stvari, mi takoĎ<br />
erpokazuju da je isti broj, bez izmjena, <strong>rad</strong>i sasvim u redu s drugim tipovima<br />
podataka,uključujući i žice, torke, itd. Sortiranje je dobra polazna primjer, jer ne samo<br />
dakonstruira karte izravno, bez komplikacija sa memory management (biti riječi<br />
kasnije),ali parametar semantika takoĎer odgovara: duži donosi vrijednosti, dok su polja don<br />
osireferencu.<br />
3. HeapSort (gomila) poredaj i prioritet redovi<br />
Naš uvod nastavlja s HeapSort poredajem i prioritet redovima. Heap je struktura<br />
podataka koja predstavlja gotovo uravnoteženo binarno stablo koristeći niz A[1 .. n], gdje se<br />
lijevo i desno nalazi<br />
dječji element A[i] smješten na A[2i], A[2i+1], odnosno, i A[i]> = A[2i], A[2i+1]. HeapSort g<strong>rad</strong>i<br />
sortirani niz redova iz stražnjeg dijela polja prema naprijed jedan element u vrijeme<br />
vaĎenja najvećeg elementa iz skupine. U početku sortirani dio je prazan, i poziv na<br />
BuildHeap pretvara A[1 .. n] u skupini. Budući da iz skupine stavlja najveći element u A[1],<br />
u prvoj iteraciji smo ga izvaditi i staviti ga u A[n], koji je njegov ispravan sortirani položaj.<br />
Sljedeća iteracija ekstrakti drugi najveći element (iz A[1] opet) i stavlja ga u A[n-1], i sl., a to<br />
se nastavlja sve dok se sve ne sortira. Imajte na umu da se Heapify zove kao dio<br />
svakog koraka ekstrakcije. To je zato što ako mi razmijenimo A[1] i A[h], a zatim A[1 .. h-<br />
1] više ne zadovoljava <strong>hr</strong>pu nekretnina, ali budući da je još uvijek "skoro" <strong>hr</strong>pa -<br />
to jest, sve osim korijena položaj je još uvijek ispod gomile - to<br />
4
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
itova. Pohlepni algoritam koristi prioritet red za izdvajanje dva čvora (list ili interni), s<br />
najnižim frekvencijama, dodjeljuje novi čvor čija težina je zbroj dva, i umeće novi čvor<br />
natrag u red prioriteta. Algoritam završava kad prioritet red uklanja zadnji čvor, koji<br />
postaje korijen stabla Huffman. Niz bitova za svako slovo može biti proizveden od<br />
strane poprijeko Huffman binarno stablo, gdje je uzimanje lijevoga kraka rezultat u '0',i desna<br />
grana rezultat u '1'.<br />
Na primjer, pretpostavimo da je naš ulaz skup znakova s pripadajućim frekvencija:<br />
'a': 45%<br />
'b': 13%<br />
'c': 12%<br />
'd': 16%<br />
'e': 9%<br />
'f': 5%<br />
Huffman algoritam konstruira stablo usporeĎujući dva elementa s najmanje<br />
frekvencije, stvara novi unutarnji čvor čija je frekvencija jednaka njihovom<br />
zbroju, u red prioriteta. Rezultat je stablo (sl. 1) koje definira promjenljive duljine koda<br />
za svaki znak. Lijevo grane su označene 0, a desno grane su označeni 1, a Huffman kod<br />
za znak se jednostavno niz stazu natpiše iz korijena do listova. Npr., kodiranje:<br />
'a': 0<br />
'b': 1 0 0<br />
'c': 1 0 1<br />
'd': 1 1 0<br />
'e': 1 1 1 0<br />
'f': 1 1 1 1<br />
Slika 1 Primjer Huffman stabla<br />
Budući da smo već prioritet red, ono što nam nedostaje je specijalizirano binarno<br />
stablo. Zahtjevi su:<br />
čvor nultog stupnja mora biti u stanju da predstavlja pismo, bude kodirana, a njegova<br />
učestalost.<br />
unutarnji čvor mora imati dvoje djece, i ona takoĎer mora imati težinu koja je jednaka<br />
zbroju za svoju djecu.<br />
red prvenstva mora biti u stanju „enqueue“ i „dequeue“ i lišće i unutarnje čvorove i<br />
usporediti ih na temelju težine<br />
6
Ako smo za provedbu ovog s t<strong>rad</strong>icionalnim jezikom kao što je C ili Java, trebali bismo<br />
naučiti kako definirati strukturu ili klasu s nazivom polja težina; list čvorova,<br />
potrebno karakter polje, dok unutarnji čvorovi zahtijevaju leftchild i rightchild polja. Budući da<br />
je prioritet red, mora biti u mogućnosti da ih usporedi, to će biti potrebno<br />
modificirati prioritet reda i pozvati odgovarajuću metodu usporedbe umjesto koristeći<br />
izgraĎen-u odnosu na operatora, i oba lišća i unutarnji čvorovi moraju biti ili u istoj klasi<br />
ili biti podrazred u istoj bazi klase koja implementira usporedna metoda.<br />
MeĎutim, ni postojeće ispravljanje pogrešaka nema znanja da može automatski ispisati<br />
čvorove zajedno kao stablo, i stoga je rutina pisati naredbu print, što zapravo može biti<br />
prilično lukav i biti još jedan veliki izvor bugova.<br />
Python implementacija može biti učinjeno elegantno, bez potrebe za pisanjem dodatne<br />
rutine ili definiranje nove klase ili strukture za stabla čvorova. Predstavljaje binarnih stabla u<br />
<strong>Pythonu</strong>, u duhu sličan Lisp:<br />
Leaf čvorovi su zastupljeni kao (frekvencija, karakter) torke:<br />
[(45, 'a'), (13, 'b'), (12, 'c'), (16, 'd'), (9, 'e'), (5,<br />
'f')].<br />
Unutarnji čvorovi su zastupljeni kao u nalog 3 torke: (frekvencija, lijevo, desno): Na<br />
primjer, u donjem desnom podstablu na slici 1 može se prikazati kao<br />
(14, (5, 'f'), (9, 'e'))<br />
koja predstavlja unutarnji čvor čija težina je 14%, čija je lijevo dijete (5, 'F'), te čije je<br />
pravo dijete (9, 'e').<br />
Stablo je konstruirano funkcionalno s torka stvaranje, bez potrebe da se koristi bilo koji<br />
čvor stabla strukture podataka, i nema potrebe da manipuliraju lijevo/desno. Štoviše, to<br />
je lako koristiti s postojećim prioritetnim redom strukture podataka, bez izmjena! To je zato<br />
što se<br />
torke može usporediti na leksikografski poredak koristeći istu<br />
usporedbu operatora. Na taj način, unutarnji čvorovi i lišće može biti u odnosu, iako<br />
oni kodiraju različite informacije. Razlika izmeĎu njih je da je len () = 2 za leaf (list), i = 3 za<br />
unutarnji čvor.<br />
5. Grafikon Algoritmi<br />
Graf ima više prikaza, a većina <strong>algoritama</strong> može pretpostaviti ili susjedstva liste ili matrice<br />
susjedstva<br />
reprezentacije.<br />
Za provedbu graf u t<strong>rad</strong>icionalnom sustavu programskog jezika kao što su C ili Java, prvo bi<br />
morao definirati strukture podataka za vrhove, za rubove, a za graf, koji služi kao front-end<br />
za stvaranje i brisanje svoje vrhove i rubove. Dizajn takvih podataka struktura lako može<br />
dominirati kodiranje vrijeme i nije lako za višekratnu upotrebu, uglavnom zato što ti tipovi<br />
podataka moraju biti projektirani kao „kontejneri“. Iako paketi poput LEDA [3] kako bi se<br />
poboljšao pokušaj ponovne upotrebe objektno orijentiranog izvorni kod u C++ predloške, oni<br />
i dalje zahtijevaju da učenici usvoje cijeli paket prije nego što mogu početi <strong>rad</strong>iti nešto<br />
korisno. Kontejneri su često dizajnirani za zaobilaženje problema s jakim, statički tipkanje, ali<br />
to zahtijeva reimplementaciju dinamičkog tipa provjere u kraj-korisnik kod. Čak i gori<br />
nedostatak da je uporaba C-pokazivača ili Java-reference čini neugodan da biste vidjeli ove<br />
predmete. Iako „debugger“ može prikazati te objekte u nekom tekstualnom obliku, to<br />
prikazuje previše informacija ili nije izravno od koristi u programu.<br />
Python nudi mnoge prednosti kao što je naglašeno od strane strukture grafa podataka. Mi<br />
7
koristimo vrlo kompaktan, rječnik-of-rječnika (DD) provedbu zastupljenosti susjedstvo popis<br />
grafa. Uglavnom graf je prikazan kao Python rječnik, čije su tipke niz imena vrhova, a svaki<br />
vertex ime preslikanog na svoje susjedstvo popis. Npr., graf prikazan na slici. 2:<br />
Sl.2: Primjer usmjereni graf<br />
To može biti zastupljena sa sljedećim Python kodom:<br />
H = {'A': ['C', 'D'], 'B': ['D', 'A'], 'C': ['D', 'E'],<br />
'D': ['E'], 'E': [] }<br />
Gore predstavlja jednostavan, usmjereni, neponderirani graf. Ako ponderirani graf<br />
kao što sl. 3 prikazuje, onda možemo jednostavno zamijeniti liste susjedstva vrha s<br />
rječnicima koji su na karti susjedna vrha njihove težine:<br />
Sl. 3: Primjer grafa ponderirane (težine)<br />
L = {'A': {'C':2, 'D':6}, 'B': {'D':8, 'A':3},<br />
'C': {'D':7, 'E':5}, 'D': {'E':-2}, 'E': {}}<br />
Popis vrhova V je jednostavno H.keys () ili L.keys (). Susjedstvo popis H [v] zaneponderirani<br />
m grafikone, i L [v]. tipke () za ponderirani grafova. Težina ruba mase w(u, v) je L[u] [v]. Da bi<br />
se olakšalo programiranje, možemo završiti pojedinosti provedbe unutar objekta.<br />
Grafikon klase:<br />
def __init__(self, g):<br />
self.g = g<br />
def V(self):<br />
return self.g.keys()<br />
def Adj(self,v):<br />
return self.g[v].keys()<br />
def w(self,u,v):<br />
return self.g[u][v]<br />
Možemo stvoriti grafikon objekt sa G = Graf (L). Prednosti s tim pristupom uključuju<br />
kompaktni tekstualni oblik i proširivost. Prvo, stvarno ne postoje strukture podataka<br />
za projektiranje. Tekstualni prikaz grafa je Python izvršna. Student može upisati u ovoj<br />
strukturi interaktivno ili u tekstualnoj datoteci bez korištenja posebnih graf-urednika. Struktura<br />
8
podataka se može ispitati samo tako da upišete svoje ime. To onda može biti<br />
cut/lijepiti na drugi prozor Python tumača ili na drugi Python program, bez ikakvih sintaktičkih<br />
izmjena.<br />
Još važnije, ovaj prikaz je iznimno proširiv. Različiti algoritmi koriste dodatne atribute, ali se<br />
mogu dodati prema potrebi. Npr., jedan izvor, najkraći put <strong>algoritama</strong> ili breadth-first/depthfirst<br />
traversals zahtijevaju dodatne atribute, kao što prethodnik<br />
upućuje. U Python, algoritam jednostavno mogu dodati atribut prethodnik graf-objekt (kao<br />
što G.pred [v]), bez potrebe za definiranje podrazred za svaki algoritam. Ove novo<br />
dodano, atributi takoĎer mogu biti pregledani i izravno mijenjati bez potrebe nove rutine.<br />
6. Zaključak i zašto je Python pogodan za učenje iz<strong>rad</strong>e<br />
<strong>algoritama</strong>!<br />
Kao algoritam orijentirani jezik, Python omogućava učenje ključnih koncepata u dizajnu<br />
<strong>algoritama</strong>, umjesto da se bori s nama sa osebujnim obilježjima koje imaju konvencionalni<br />
programski jezici. Python način obraĎuje vrste podataka, predstavlja savršeno<br />
odgovarajućim načinom na koji potiče da sa sami zainteresiramo za njega i onda<br />
eksperimentiramo. Jednako je važno naše korištenje struktura podataka za drveće i grafove,<br />
koji su kao kompaktna što je više moguće i još ljudskih čitljiv i spremno prihvatio Python<br />
prevodioca.<br />
Sve u svemu, mislim da je Python jako dobar program za iz<strong>rad</strong>u <strong>algoritama</strong>, budući da nas<br />
on dosta često uči vještine rješavanja problema, a ne samo programiranje, kao što su<br />
dodatni moduli koje možemo koristiti bilo u matematici ili u fizici, crtanje svakakvih grafova i<br />
krivulja i puno toga.<br />
7. Literatura<br />
1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to<br />
Algorithms, Second Edition, McGraw-Hill Press, September 2001. ISBN 0-262-03293-7.<br />
2. Pai H. Chou, ECE 235 Website, University of California, Irvine, Fall<br />
2000. http://e3.uci.edu/00f/15545/ See also Fall 2001 edition at http://e3.uci.edu/01f/15545/.<br />
3. Algorithmic Solutions Software GmbH, homepage, http://www.algorithmic-solutions.com/,<br />
2001.<br />
4. Sara Baase, Allen Van Gelder, Computer Algorithms: Introduction to Design and Analysis,<br />
Addison Wesley, 2000.<br />
5. Mark Allen Weiss, Data Structures and Algorithm Analysis in JAVA, Addison-Wesley, 1999.<br />
6. Algorithm Education in Python: http://www.ece.uci.edu/~chou/py02/python.html<br />
7. 20.2.5. Funkcije:<br />
http://docs.python.org/release/2.6.6/library/cgi.htmlhighlight=making%20algorithms<br />
8. The Python Profilers:<br />
http://docs.python.org/release/2.6.6/library/profile.htmlhighlight=making%20algorithms<br />
9. bisect — Array bisection algorithm:<br />
http://docs.python.org/release/2.6.6/library/bisect.htmlhighlight=making%20algorithms<br />
10. decimalni - Decimalni fiksne točke i s pomičnim zarezom aritmetika:<br />
http://docs.python.org/release/2.6.6/library/decimal.htmlhighlight=making%20algorithms<br />
9