You are on page 1of 40

Algoritmi - uvod

Podatkovne strukture
Prof. Matja Colnari

Podatkovne strukture
Prof. Matja Colnari

Uvodni podatki
http://www.rts.uni-mb.si Matja Colnari, G2-1N-04, torek 13h-15h colnaric@uni-mb.si Matej progar, F202, torek 10h-12h matej.sprogar@uni-mb.si

Podatkovne strukture
Prof. Matja Colnari

Literatura

M. Colnari: Zbrani materiali. UM FERI Maribor, 2009. http://www.moodle.uni-mb.si I. Kononenko, M. Robnik ikonja: Algoritmi in podatkovne strukture I in II. Zaloba FE in FRI Ljubljana, 2004. (Jernej Kozak: Podatkovne strukture in algoritmi) M. Colnari, B. Hadjar: Strukture. Programsko okolje za demonstracijo delovanja ter eksperimentiranje s podatkovnimi strukturami in algoritmi. UM FERI Maribor, 2000-2006.

Podatkovne strukture
Prof. Matja Colnari

Vsebina

Uvod: algoritmi, zahtevnost. Podatkovne strukture, osnovni pojmi, primer (tabela); izvedba podatkovnih struktur. Sklad, vrsta: pojmi, definicije, statine in dinamine izvedbe, primeri uporabe. Linearni povezani seznam: pojmi, definicije, statine in dinamine izvedbe, posebne oblike seznamov, primeri uporabe. Zgoena tabela. Drevesa: pojmi, definicije, vrste, lastnosti, pregledi dreves. Kopica: naini gradnje, zahtevnosti. Iskalno drevo: lastnosti, vstavljanje v vrh. Nadziranje rasti iskalnih dreves: popolnoma izravnano drevo. Uravnoteeno drevo (AVL), optimalno drevo. Vesmerna drevesa: Bayerjevo (B-)drevo. Grafi: pojmi, definicije, predstavitve, pregledi, vpeta drevesa.

Podatkovne strukture
Prof. Matja Colnari

Dva nivoja reevanja raunalnikih problemov

snovanje reitev za probleme, ki bi se naj reili z raunalnikom


analiza zahtev, specificiranje nalog, (formalni) zapis lastnosti komponent programov (vstopni in izstopni pogoji, prenosne funkcije) izvedba funkcij nas na tem nivoju ne zanima preverjanje: validacija reitev (ali reitev ustrezno rei problem)

programiranje
niji nivo; realizacija specificiranih problemov obiajno zanemo uenje raunalnitva s programiranjem - s snovanjem algoritmov in uenjem programskih jezikov dovolj za reevanje preprostih problemov preverjanje: testiranje programov, verifikacija (preverjanje skladnosti s specifikacijami)

Podatkovne strukture
Prof. Matja Colnari

Programiranje: snovanje algoritmov


Algoritem je konni nabor ukazov, ki ob izvajanju opravi neko nalogo v konnem tevilu korakov.

Algoritmino miljenje loveku ni prirojeno.

Primer:

Kako ste ugotovili, katero tevilo je najveje?

3 4 8 2 7 5 6 1

lovek razmilja, kaj je treba narediti, ne kako.

Algoritem, zapisan v programskem jeziku, je program. Za programerja je problem reen, ko je sprogramiran; lahko reemo, da je raunalnitvo tudij algoritmov.

Podatkovne strukture
Prof. Matja Colnari

Lastnosti algoritma
Algoritem je konni nabor ukazov, ki ob izvajanju opravi neko nalogo v konnem tevilu korakov.
vhodi: - ima podatke (ni obvezna lastnost),

izhodi:

- ima rezultat(e),

dolonost:
konnost:

- je natanno in enoumno doloen,


- se kona v konnem tevilu korakov v vseh primerih,

izvedljivost: - se ga da izvesti.

Podatkovne strukture
Prof. Matja Colnari

Snovanje algoritmov
Razvoj algoritma predstavlja preslikavo KAJ KAKO
Problema pri snovanju algoritma: Kako zasnovati algoritem, ki ni trivialno reljiv?
Obiajno kompleksni problem razdelimo na delne, jih loeno reimo ali dalje razdelimo na manje ter reitve sestavimo. V zahtevnejih primerih je vasih potrebno uporabiti bolj sofisticirane metode (glej poglavje o snovanju algoritmov).

Kako najti najboljo, kadar obstaja ve reitev?


Naloga je pregledati mone (najdene) reitve, oceniti njihovo kakovost in izbrati najboljo.

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

naravni jezik:
grafini opis: psevdo kod:

teko zadostiti zahtevam (dolonost!);


diagram toka; pregledni, se obiajno ne morejo izvesti;

programski jezik: program, izvedljiv na raunalniku. Lahko na razlinih nivojih. Tudi grafini!

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

Diagram poteka

Obdelava Izvedbeni stavek

odloitev

vnos ali izpis pod.

akcija (start, stop..)

Povezovalna toka

povezava

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

sestavljeni stavek
stavek stavek

Psevdo kod

izvedbeni stavek
postavi, izraunaj, izvedi, itd..

//komentar

vhodno/izhodni stavek
preitaj, izpii da

odloitveni stavek
e je(ni) pogoj potem stavek1 [sicer stavek2]
(konec odloitve)

pogoj?

ne
stravek2 stavek1

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

Psevdo kod

ponovitveni stavki
ponavljaj za tevec od zaetni do konni s korakom korak stavek (konec zanke)

tevec=tevec+korak

tevec=zaetni

stavek

tevec=konni

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

Psevdo kod

ponovitveni stavki
ponavljaj za tevec od zaetni do konni s korakom korak stavek (konec zanke) tevec=zaetni

tevec>konni

da

tevec=tevec+korak
stavek

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

Psevdo kod

ponovitveni stavki
dokler je(ni) pogoj ponavljaj stavek (konec zanke)
pogoj

ne{da}

da{ne} stavek

Podatkovne strukture
Prof. Matja Colnari

Izraanje algoritmov

Psevdo kod

ponovitveni stavki
ponavljaj stavek dokler je(ni) pogoj stavek

pogoj

ne[da]

da[ne]

Podatkovne strukture
Prof. Matja Colnari

Analiza algoritmov
a) preverjanje pravilnosti
verifikacija, validacija. Testiranje.

b) preverjanje optimalnosti
ali gre morda algoritem zasnovati preprosteje ali ceneje;

c) analiza prostorske in asovne zahtevnosti


koliko asa in pomnilnikega prostora potrebujemo za izvedbo nekega algoritma.

Podatkovne strukture
Prof. Matja Colnari

Preverjanje algoritmov
Algoritmu slepo sledimo, zato ne sme imeti napak; preverjanje je potrebno na vseh nivojih snovanja; Verifikacija: preverjanje skladnosti s specifikacijami; (formalne) specifikacije so zelo pomembne; preverjajo se prenosna funkcija ter vstopni in izstopni pogoji. Testiranje je oji pojem kot verifikacija. Za testiranje obstajajo razline metode, npr. preizkus vseh loginih poti. Validacija: ali program opravi to, za kar je namenjen? (Vkljuuje tudi preverjanje specifikacij!)

Verifikacija in validacija je v vseh fazah najzahtevneja dejavnost!

E. Dijkstra: testiranje lahko dokae le, da je v algoritmu napaka, ne pa, da je ni.

Podatkovne strukture
Prof. Matja Colnari

Ocenjevanje zahtevnosti algoritmov


ocenjevanje koliine raunskih virov in sredstev, potrebnih za reitev problema po izbranem postopku. koliina pomnilnika prostorska zahtevnost merimo v enotah notranjega ali zunanjega pomnilnika (v zlogih, besedah, blokih ipd); as izvajanja asovna zahtevnost merimo v raunskih operacijah (tevilo setevanj, mnoenj, deljenj, premikov ipd.).

Podatkovne strukture
Prof. Matja Colnari

Najbolja, najslaba, priakovana zahtevnost


kadar je zahtevnost odvisna od podatkov v konkretnem primeru, se je ne da vnaprej natanno predvideti.
Primer:
ponavljaj za i od 1 do 100 e ni liho(x[i])potem w[i] = x[i] deljeno_z 2
(konec odloitve) (konec zanke)

Kakne so najbolja, najslaba in priakovana zahtevnost? obiajno je zahtevnost teko natanno realno doloiti v absolutnih enotah, zelo dobri so e priblini oz. relativni (primerjalni) rezultati; najvekrat je tudi to problematino takrat je dovolj red velikosti posebej teko je doloiti priakovano zahtevnost.

Podatkovne strukture
Prof. Matja Colnari

Hitrost rasti zahtevnosti algoritmov


asovna T(n) in prostorska zahtevnost S(n) sta obiajno funkciji koliine podatkov. Tip funkcij T(n) oz. S(n) podaja hitrost naraanja zahtevnosti s tevilom podatkov.

Teki problemi: eksponentne funkcije, npr. 2n, nn primerni le, kadar obdelujemo malo podatkov;

Lahki problemi: polinomski, logaritemski, npr. nc, n*log(n) ugodni, posebno pri majhnem c.

Podatkovne strukture
Prof. Matja Colnari

Grafini prikaz rasti zahtevnosti algoritmov


109 108

2x

Logaritemsko merilo smiselno prikazuje razmere v podrojih, ki nas zanimajo:

107 106 105

x3

x2
104 103 102 10 1
1 2 4 8 16 32 64 128

x*log2(x) x log2(x)

Podatkovne strukture
Prof. Matja Colnari

Primer nepriakovanega naraanja zahtevnosti problemov


Zgodba: po legendi si je pravila za ah izmislil indijski modrec Seta. Takratni vladar eram mu je obljubil za nagrado, karkoli si bo zaelel.

Seta si je izbral itna zrna, kolikor je polj na ahovnici: na prvo polje 1, na drugo 2, na tretje 4 in na vsako naslednje dvakrat ve kot na prejnje.
Vladar je bil ualjen zaradi domnevnega omalovaevanja njegove irokogrudnosti, a se je kmalu streznil, ko so izraunali koliino zrnja, ki ga je dolan Seti:

18 446 744 073 709 551 615 zrn 1 200 000 000 000 m3 (v 1m3 gre priblino 15 milijonov zrn) e je irina shrambe 10m, viina pa 4m: dolina 30 000 000 km = 80x razdalja do Meseca ali petino razdalje od Zemlje do Sonca

Podatkovne strukture
Prof. Matja Colnari

Primer neobvladljivega naraanja zahtevnosti:


Problem trgovskega potnika: najdi takno zaporedje obiskov n strank, da bo pot najkraja (model: graf). e elimo na primer pregledati vsa mona zaporedja obiskov vozli grafa (vseh monih poti trgovskega potnika), moramo izvesti n! permutacij in izraunati doline njihovih poti ter konno izbrati najkrajo.

Recimo, da potrebujemo za izraun asa enega obhoda 1 s:


za 10 strank potrebujemo 3,6 sekund, za 15 strank potrebujemo 15 dni, 3 ure in 14 minut, za 20 strank potrebujemo 77146 let .

Podatkovne strukture
Prof. Matja Colnari

asovna analiza algoritma


1. izoliramo najpogosteje obdelujoi se del programa in izberemo operacijo, ki jo imenujemo "aktivna" (nobena druga se ne sme izvajati pogosteje);

2. opazujemo, kako tevilo vhodnih podatkov vpliva na tevilo izvajanj aktivne operacije. Primer:
vsota := 0; ponavljaj za I od 1 do N vsota := vsota + V[I] (konec zanke);

(aktivna operacija setevanje, linearna odvisnost od N)

Podatkovne strukture
Prof. Matja Colnari

Primer 2: mnoenje kvadratnih matrik


ponavljaj za I od 1 do N ponavljaj za J od 1 do N vsota := 0; ponavljaj za K od 1 do N vsota := vsota + A[I,K]*B[K,J];
(konec zanke)

C[I,J] := vsota
(konec zanke) (konec zanke)
K J
[I,J]

(zakaj je vpeljana spremenljivka vsota, eprav ni nujna?)

Za merilo dimenzije vzamemo N namesto t. elementov 2*N2. Aktivna operacija naj bo mnoenje; tevilo ponovitev: N3

Podatkovne strukture
Prof. Matja Colnari

Natanneja analiza za eno operacijo


Najpogosteja operacija je prireditev. Natanneje preglejmo, katere in koliko prireditev nastopa v programu: N krat priredimo I N2 krat J in C N3 krat K N2 + N3 krat vsota

skupaj: 2*N3 + 3*N2 + N najmoneji faktor je N3

Pri velikem N se pribliek bolj ujema z natannim izrazom.


ponavljaj za I od 1 do N ponavljaj za J od 1 do N { vsota := 0; ponavljaj za K od 1 do N vsota := vsota + A[I,K]*B[K,J];
(konec zanke)

C[I,J] := vsota}
(konec zanke) (konec zanke)

Podatkovne strukture
Prof. Matja Colnari

Natanneja analiza vseh operacij


a: ponavljaj za I od 1 do N b: ponavljaj za J od 1 do N c: {vsota := 0; d: ponavljaj za K od 1 do N e: vsota := vsota + A[I,K]*B[K,J];
(konec zanke)

f:

C[I,J] := vsota} (konec zanke)


(konec zanke)

a: 1 poveanje tevca, 1 vpis, 1 primerjava b: 1 poveanje tevca, 1 vpis, 1 primerjava c: 1 vpis d: 1 poveanje tevca, 1 vpis, 1 primerjava e: 1 vpis, 2 aritm. oper., 2 ra. indeksa f: 1 vpis, 1 ra. indeksa

=3 =3 =1 =3 =5 =2

Analiza programa: N*(a + N*(b + c + N*(d + e) + f))= N*(3+N*(3+1+N(3+5)+2))=N*(3+N(6+8N) = 8N3+6N2+3N

Podatkovne strukture
Prof. Matja Colnari

Grafini prikaz zahtevnosti pri velikih n

1012

8N3 + 6N2 + 3N 2N3 + 3N2 + N

1010
108 106
N3

104 102 1

10

100

1000

10000

Podatkovne strukture
Prof. Matja Colnari

Zapis reda velikosti


T (n) O( g (n)) c, n0 0 : n n0 cg (n) T (n) 0
T(n) je reda velikosti g(n), e obstajata takni konstanti c in n0, da je |T(n)| c * |g(n)| za vsak n > n0 (ne zanima nas obnaanje pri malih n)
c*g(n) T(n)

g(n)

O(g(n)) podaja tip obnaanja T(n) pri velikih vrednostih n g(n) je asimptotina zgornja meja funkcije T(n)

n0

Primer: 100*n3 . . . O(n3) 6*n2+2*n+50 . . . O(n2)

Podatkovne strukture
Prof. Matja Colnari

Primeri
2 PRIMER (N) for (j=0; j!=N; j=j+2) for (i=0; i!=N/2; i=i+3) x[i,j]++; Reitev: n/2 * n/2 * 1/3 = n2/12 T(n)= O(n2) 2 PRIMER (N) for (int i=0; i<N; i++) for (int j=0; j<=2*N; j=j+3) C[i]=C[i]*A[i][j]; int k=0; while (k<N) T=T+C[k]; k=k+2; Reitev: n*2*n/3 + n / 2 = =2*n2/3 + n/2 T(n)= O(n2) Zanka j od 0 do n-1, korak po 2: n/2 ponovitev Zanka i od 0 do n/2-1, korak po 3: n/2 x 1/3 ponovitev

Zanka i od 0 do n-1, korak po 1: Zanka j od 0 do 2n(-1), korak po 3:

n ponovitev 2n/3 ponovitev

Zanka k od 0 do n-1, korak po 2:

n/2 ponovitev

Podatkovne strukture
Prof. Matja Colnari

Osnovne strategije razvoja algoritmov


deli

in vladaj optimalne reitve

problem iskanja reitev razbijamo na laje podprobleme;


iskanje

iemo najboljo reitev; zahtevnost iskanja obiajno velika, ne moremo reiti v polinomskem asu (NP poln problem). Vasih pomaga vpeljava omejitve prostora in usmerjena strategija.
iskanje

pribline reitve

iemo reitev, ki bo zadostila naim priakovanjem; ni nujno najbolja, a je zahtevnost iskanja obvladljiva; kakovost reitev se lahko bolj ali manj priblia optimalni, praviloma je ne dosee.
stohastini

algoritmi

avtomatsko iskanje reitev na principu nakljunih poizkusov.

Podatkovne strukture
Prof. Matja Colnari

Problem trgovskega potnika


Tipini problem za demonstracijo principov gradnje algoritmov:
Trgovski potnik mora obiskati vsa vozlia v grafu z uteenimi povezavami tako, da bo opravil najkrajo mono pot. Primeri pristopov: prva reitev je nakljuno zaporedje obiskov. Naslednja pot je drugana permutacija obiskov, itd.

zanemo z obiskom enega od vozli. Naslednjo pot dobimo tako, da dodamo neko blinje vozlie.

poveemo po nekaj blinjih vozli v delne poti. Naslednjo reitev dobimo tako, da poveemo konec ene poti z zaetkom druge.

Iemo lahko optimalno ali pribline reitve.

Podatkovne strukture
Prof. Matja Colnari

Deli in vladaj
Osnovna strategija reevanja problemov. Celoten problem skuamo razbiti na preprosteje podprobleme. To ponavljamo tako dolgo, dokler niso trivialno reljivi. Dekompozicija na dva naina: na raznovrstne podprobleme (top-down pristop, postopno izboljevanje; najobiajneja metoda programskega inenirstva)

na istovrstne podprobleme
(bolj zanimivo. Glej primere spodaj; tudi npr. iskanje nile funkcije z razpolavljanjem intervala, ..)

Podatkovne strukture
Prof. Matja Colnari

Reevanje problema trgovskega potnika razbijanje na istovrstne podprobleme

kadar graf ni prevelik, lahko preizkusimo vsa mona zaporedja obiskov, eprav nekatera niso smiselna; kadar je graf velik, ga je ugodno razdeliti na smiselne podgrafe (npr. obisk vseh strank v enem mestu ali strnjenem naselju) in poiskati delne reitve ter jih konno zdruiti v skupen obhod. Potrebno je stohastino poznavanje geografije oz. strateko odloanje o delitvi poti na dele. eprav ta reitev ne bo nujno optimalna, bo najbr sprejemljiva in dobljena z razumnim vloenim trudom.

Podatkovne strukture
Prof. Matja Colnari

Iskanje optimalne reitve


Metode za iskanje optimalne reitve sicer najdejo najboljo reitev, vendar je praviloma njihova zahtevnost nesprejemljiva. Obiajno je potrebno pregledati ves prostor monih reitev.
Izrpno preiskovanje Preie vse monosti in izbere najboljo. e elimo na primer pregledati vsa mona zaporedja obiskov vozli grafa (vseh monih poti trgovskega potnika), moramo izvesti n! permutacij.

Primer: recimo, da potrebujemo za en obisk 1 s:


za pregled grafa z 10 vozlii potrebujemo 36 sekund, za pregled grafa s 15 vozlii potrebujemo 7.5 mesecev, za pregled grafa z 20 vozlii potrebujemo 1.5 milijona let .

Podatkovne strukture
Prof. Matja Colnari

Zmanjevanje zahtevnosti postopka


Ker je gornja zahtevnost pogosto nesprejemljiva, je treba najti nain, da ne bi preiskovali vseh monosti, temve le njihovo najbolj obetavno podmnoico. Primer: problem osmih kraljic: kraljice zaporedoma postavljamo na desko. Upotevamo le reitve, pri katerih se ne napadajo; ostalih ne razvijamo naprej. Za doloanje podmnoice si pogosto pomagamo s hevristinimi (izkustvenimi, nedokazanimi) ocenami. Te obiajno temeljijo na oceni kakovosti neke reitve glede na priakovano najboljo kakovost. Tudi zaporedje pregledovanja reitev postavimo glede na priakovano kakovost reitve. Vasih si postavimo za cilj doloeno kakovost reitve in konamo, ko jo doseemo (npr. e sprejemljivo dolino poti potnika).

Podatkovne strukture
Prof. Matja Colnari

Strategije iskanja priblinih reitev


Iskanje optimalne reitve je pogosto prezahtevno, zato se zadovoljimo s priblinimi reitvami, ki niso nujno popolnoma optimalne, vendar je njihova kakovost zadovoljiva.

Poreno iskanje
Reitev gradimo tako, da ne preizkusimo vseh monih reitev v nekem koraku, temve se odloimo za eno, najbolj obetavno. Primer: barvanje vozli grafa: vozlia je treba pobarvati s im manj barvami tako, da dve sosednji vozlii ne bosta iste barve. Reitev: pobarvamo prvo vozlie in nadaljujemo z vsemi vozlii, ki niso sosednja. Ko jih zmanjka, nadaljujemo z naslednjo barvo, itd. Iskanje v snopu: raziritev porene metode; ohranimo in preizkusimo n najobetavnejih reitev

Podatkovne strukture
Prof. Matja Colnari

Stohastini algoritmi iskanja reitev


Genetski algoritmi Temeljijo na idejah genetike in naravne selekcije. Ena reitev ustreza enemu osebku v genetiki. Lastnosti (parametri, simboli) stanja ustrezajo genom. Algoritem se zane z nakljuno izbrano reitvijo (stanjem) osebkom, nato iemo nove reitve s transformacijami. Te so podobne genetskim: reprodukcija s krianjem osebkov (generiranje novih reitev s kombinacijo obstojeih) ter mutacija (nakljune spremembe v reitvah)

Podatkovne strukture
Prof. Matja Colnari

Postopki pri genetskih algoritmih


krianje: iz dveh osebkov lahko nastane nov osebek, katerega geni (parametri, lastnosti) so sestavljeni iz neke nakljune kombinacije lastnosti obeh prednikov.
reprodukcija: im bolji je osebek, s tem vejo verjetnostjo sodeluje v naslednji generaciji in generira tem ve potomcev; mutacija: z neko majhno verjetnostjo se lahko vsak gen v novi generaciji osebkov spremeni.

Na ta nain dobivamo s transformacijami nove reitve. e so dobre, se bodo v naslednji generaciji ohranile v vejem tevilu ali obsegu, e so slabe, bodo izumrle. Veje tevilo pomeni vejo verjetnost sodelovanja pri krianju in s tem monost nastanka e boljih reitev.

Podatkovne strukture
Prof. Matja Colnari

Reitev problema trgovskega potnika z genetskimi algoritmi


krianje: iz dveh reitev sestavimo novo tako, da vzamemo del poti iz prve, drugi del pa iz druge reitve. reprodukcija: im bolja je reitev, tem pogosteje in s tem daljimi odseki nastopa pri snovanju novih poti. mutacija: zelo poredko nakljuno spremenimo del poti v nakljunih reitvah. Z genetskimi algoritmi s pomojo nakljunih procesov raunalnik samodejno ie nove reitve. Ve asa, kot mu damo, veja je monost, da se bo priblial optimalni reitvi.

You might also like