Algoritmid ja andmestruktuurid Iseseisev t Praktikum 20092010 kevadsemestril

  • Slides: 25
Download presentation
Algoritmid ja andmestruktuurid Iseseisev töö Praktikum 2009/2010 kevadsemestril J. Liivi 2 -205, T 12

Algoritmid ja andmestruktuurid Iseseisev töö Praktikum 2009/2010 kevadsemestril J. Liivi 2 -205, T 12 -14 Linux open. SUSE 11. 2 Jüri Kiho

Koduleht: http: //vvv. cs. ut. ee/~kiho/ads/spring 10/ Soovitatav kaustastruktuur: aa. Praktikum Abipakett kodulehelt (lahtipakituna)

Koduleht: http: //vvv. cs. ut. ee/~kiho/ads/spring 10/ Soovitatav kaustastruktuur: aa. Praktikum Abipakett kodulehelt (lahtipakituna) abi classes ee ut kiho src teema 1 Main. java aa ee doc ut kiho aa teema 2 teema 3 teema 4 teema 5 util keerukus graaf Kaustas doc asub abipaketi kirjeldus failina index. html teema 6 teema 7 teema 8 2

Ajaline keerukus. Asümptootilised hinnangud. Töö nr 1 Tähtaeg: 22. 02. 2010 Saata: jyri. kiho@ut.

Ajaline keerukus. Asümptootilised hinnangud. Töö nr 1 Tähtaeg: 22. 02. 2010 Saata: jyri. kiho@ut. ee Igas ülesandes [2]-§ 1 5, 6, 7, 8, 9, 10, 11 esinevad kaks funktsiooni. Tähistame neid vastavalt f(n) ja g(n). Valida üks ülesanne (st f ja g) ning modifitseerida funktsioonigraafikute joonistamise näiteprogramm* (Main. java) selliselt, et ekraanil kujutataks neli graafikut: funktsiooni f graafik funktsiooni g graafik funktsiooni f/g graafik funktsiooni g/f graafik Mida saab järeldada sellest, et funktsioon f/g on (paistab olevat) tõkestatud? Mida saab järeldada sellest, et funktsioon g/f on (paistab olevat) samuti tõkestatud? Märkus. Funktsioonide f ja g graafikute paremaks ekraanile manamiseks võib neid korrutada sobiva konstandiga. Keerukuse uurimise kontekstis ei muuda see midagi. * Või kirjutada uus programm. Või kasutada mõnda graafikute joonistamise vahendit. 3

import ee. ut. kiho. aa. util. *; import javax. swing. *; /** * Graafikute

import ee. ut. kiho. aa. util. *; import javax. swing. *; /** * Graafikute joonistamise näide, * klassi Graafikute. Joonistaja rakendamine. */ public class Main { public static void main(String[] args) { int n = 2000; int m = 4; double[][] x = new double[m][n]; double[][] y = new double[m][n]; String[] nimi = new String[m]; for( int i = 0; i <= n-1; i++ ) { x[0][i] = (i -n/2)/10. 0; y[0][i] = x[0][i]; } nimi[0] = "lineaarfunktsioon"; for( int i = 0; i <= n-1; i++ ) { x[1][i] = (i -n/2)/10. 0; y[1][i] = 0. 1*x[1][i]; } nimi[1] = "ruutfunktsioon"; Funktsioonide joonistamise näiteprogramm Kopeerida oma töökausta teema 1, failiks nimega Main. java double a = 0. 1; double samm = 0. 1; for( int i = 0; i <= n-1; i++ ) { x[2][i] = a; y[2][i] = 0. 3*a*Math. log 10(a)/Math. log 10(2); a+=samm; } nimi[2] = "n*log 2(n)"; a = 0. 1; samm = 0. 1; for( int i = 0; i <= n-1; i++ ) { x[3][i] = a; y[3][i] = 0. 3*Math. log 10(a); a+=samm; ; } nimi[3] = "log(n)"; new Graafikute. Joonistaja ("Ülli Õpilane", x, y, nimi); } } 4

Programmi Main. java muutmiseks (kaustas teema 1): tavaline tekstitoimeti, soovitatavalt gedit. Pärast muutmist (ja

Programmi Main. java muutmiseks (kaustas teema 1): tavaline tekstitoimeti, soovitatavalt gedit. Pärast muutmist (ja salvestamist) kompileerida. NB! Veenduge, et kaustastruktuur (vt slaid nr 2) ja ka suur-väiketähed on õiged. Programmi Main. java kompileerimiseks käsurealt (olles terminaliaknas kaustas teema 1 ): javac -cp. . /abi/classes/ Main. java Windows: javac -cp. . abiclasses Main. java Valige see käsk, kopeerige lõikelauale (Ctrl+c); sealt käsurea aknasse (Edit + Paste ). Mingi käsu kordamiseks (käsureale toomiseks) vajutage: nool üles. Kui kompileerimisel vigu ei ilmnenud, siis käivitada. Programmi Main. java käivitamiseks käsurealt (olles kaustas teema 1 ): java -cp. : . . /abi/classes/ Main Windows: java -cp. ; . . abiclasses Main Valige see käsk, kopeerige lõikelauale (Ctrl+c); sealt käsurea aknasse (Edit + Paste ). Mingi käsu kordamiseks (käsureale toomiseks) vajutage: nool üles. 5

Klassitöö (2. praktikum) Kopeerida sorteerimismeetodite ajalise keerukuse katselise uurimise programm Keerukus. java (kodulehelt, kaustast

Klassitöö (2. praktikum) Kopeerida sorteerimismeetodite ajalise keerukuse katselise uurimise programm Keerukus. java (kodulehelt, kaustast Programmid) kausta teema 1 ja asendada selles libameetodid (meetodid nr 2 ja 3) tegelike järjestamismeetoditega, näiteks mullimeetodi ja valikumeetodiga; kuid võib realiseerida ka mõne(d) teise(d) meelepärase(d) järjestamismeetodi(d). Kompileerimine: *) javac -encoding ISO-8859 -15 -cp. . /abi/classes/ Keerukus. java Meetodi nr 2 testimiseks Käivitamine: java -cp. : . . /abi/classes/ Keerukus 2 3 3 Meetodite tööaegade graafikud Käivitamine: java -cp. : . . /abi/classes/ Keerukus NB! Eelnevalt: Abipaketis aa. Praktikum Windows: java -cp. ; . . abiclasses Keerukus abi classes ee ut *) Lipp -encoding ISO-8859 -15: juhuks kui programmis nimedes esineb täpitähti (vajalik tavaliselt ainult Linuxis). kiho aa util Eemaldada failid Katse. class Kuhi. class 6

Rekursioon Klassitöö (3. praktikum) 1. Koostada ja testida rekursiivne meetod (funktsioon) korrutis järjestikuste täisarvude

Rekursioon Klassitöö (3. praktikum) 1. Koostada ja testida rekursiivne meetod (funktsioon) korrutis järjestikuste täisarvude korrutise leidmiseks, kui on antud esimene ja viimane tegur. Hanoi tornide ülesande demoprogrammi failid Hanoi. Gr. zip on kaustas http: //vvv. cs. ut. ee/~kiho/ads/spring 10/abipakett/. Pakkida see lahti, nt kausta. /teema 2/Hanoi. Gr ja selles kaustas olles käivitada käsurealt: java Hanoi. Gr 2. Kirjutada programm, mis väljastab konsoolile Hanoi tornide ülesande lahenduskäigu juhul, kui ketaste arv on n. Näiteks n = 3 korral väljastatakse: 1 -->2 1 -->3 2 -->3 1 -->2 3 -->1 3 -->2 1 -->2 3. Koostada ja testida meetod (funktsioon) kombinatsioonide arvu n-st k kaupa leidmiseks antud k ja n korral (1 <= k <= n) valemiga Cn, k = kui (k < n/2) siis (korrutis(n-k+1…n) / k!) muidu (korrutis(k+1…n) / (n-k)!) Kasutada ül. 1 kirjutatud meetodit (funktsiooni). 7

Kombinatsioonid Töö nr 2 Tähtaeg: 09. 03. 2010 Saata: jyri. kiho@ut. ee Koostada programm

Kombinatsioonid Töö nr 2 Tähtaeg: 09. 03. 2010 Saata: jyri. kiho@ut. ee Koostada programm (Java või Python) alloleva probleemi lahendamiseks, neiud – probleem A, noormehed – probleem B. A. n-liikmelisest treeningrühmast (n=10 ± 2) tuleb eelolevaks võistluseks välja valida neljase bobi meeskond. Treeningrühma iga liikme kohta on antud: nimi, kaal ja treenituse tase (reiting) naturaalarvuna. Valikukriteeriumid bobi meeskonna jaoks: kogukaal <= 325 kg; reitingute summa on võimalikult suur. B. n asutust (n=18 ± 2) moodustab asutuste juhtidest koosnevat viieliikmelist streigikomiteed. Asutuse juhtide seas on ligemale pooled naissoost. Iga liikmekandidaadi kohta on antud: nimi, sugu ja vanus. Valikukriteeriumid streigikomitee jaoks: vähemalt kaks komitee liikmetest on naissoost (feministide nõue); komitee keskmine vanus on võimalikult suur. Kombinatsioonide leidmise ja töötlemise algoritmide ning programmide eeskujud: http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Algoritmid/ + Internet 8

Ammendav läbivaatus. Magasin. Töö nr 3 Tähtaeg: 18. 03. 2010 Saata: jyri. kiho@ut. ee

Ammendav läbivaatus. Magasin. Töö nr 3 Tähtaeg: 18. 03. 2010 Saata: jyri. kiho@ut. ee a b c d e f 6 5 4 3 2 1 x Ülesanne 3. 1. Koostada võimalikult lühikese tekstiga (kommentaare arvestamata) Java või Python programm x n lipu rahumeelseks paigutamiseks n × n malelauale (n>3). Lähtekohaks võib võtta algoritmi aadressilt x http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Algoritmid/ , x kus 2 4 6 1 0 0 jooksvat seisu kujutab n-elemendiline järjend: iga lipp on oma liinil, järjendi i-s element näitab, mitmendal real i-s lipp parajasti asub; järjendi element on 0, kui vastav lipp on momendil paigutamata. Ülesanne 3. 2. Realiseerida programmina (Java või Python) ja testida sorteerimise nn magasinmeetod, vt http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Algoritmid/. Idee: 8 6 10 14 13 7 12 4 9 8 6 4 jaotada magasinidesse (igas mittekasvavalt) 10 7 14 13 12 9 tagasi järjendisse (võttes akendelt vähima) Millisest klassist on selle algoritmi keerukus? Millise järjendi korral töötab kõige kiiremini? 4 6 7 8 9 10 12 13 14 9

Graaf ja selle tabelesitus 1. 2. 3. 4. 5. Klassitöö (4. praktikum) Valmistada mingi

Graaf ja selle tabelesitus 1. 2. 3. 4. 5. Klassitöö (4. praktikum) Valmistada mingi näitegraaf (milles on nt 5 tippu, 5 kaart ja üks tsükkel), esialgu tippude ja kaarte märgenditeta. Selleks luua kausta aa. Praktikum alamkaust teema 4 (vt slaid nr 2) ja laadida sinna programm Graafitoimeti. class. Kaustas teema 4 olles käivitada käsurealt java -cp. : . . /abi/classes/ Graafitoimeti Windows: java -cp. ; . . abiclasses Graafitoimeti Luua soovitud graaf ekraanil. Graafitoimeti salvestab pidevalt ekraanil oleva graafi jooksva seisu faili graaf. txt graafi tabelesitusena. Katkestada (sulgeda) Graafitoimeti. 2. Tutvuda graafi tabelesitusega (vt ka järgmine slaid), lisada tippude ja kaarte märgendeid. Selleks vaadelda mingi tavalise tekstitoimetiga Graafitoimeti poolt loodud faili graaf. txt. Proovida lisada mõned tipumärgendid, nt ‘A’ esimesele tipule jmt. Salvestada muudetud fail graaf. txt. Graaf koos tipu- ja kaaremärgenditega kuvatakse, kui Graafitoimeti käivitada argumendiga (m): java -cp. : . . /abi/classes/ Graafitoimeti m Proovida lisada/muuta mõned tipu- ja kaaremärgendid ka Graafitoimeti abil. 10

Graaf (V, E) Näide: tippude hulk V = {A, B, C, D}, kaarte hulk

Graaf (V, E) Näide: tippude hulk V = {A, B, C, D}, kaarte hulk E = { (B, A), (A, C), (A, D), (D, C) } (1) A (2) B c a (3) C b d Tabelesitus: 1) A a --> 3 b --> 4 2) B c --> 1 3) C 4) D d --> 3 (4) D Tipul on üks väli nimega x ja väärtusega 5: Tipul on väli x väärtusega 1 ja väli t väärtusega 32: Koos tippude ekraanikoordinaatidega: 1) A[90; 30] a --> 3 b --> 4 2) B[30; 89] c --> 1 3) C[155; 105] 4) D[82; 153] d --> 3 Koos tippude (lisa)väljadega: 1) A[90; 30] a --> 3 b --> 4 2) x=5; B[30; 89] c --> 1 3) x=1; t=32; C[155; 105] 4) D[82; 153] d --> 3 11

Graafi kujutamiseks vajalikud klassid Tipp Klass nimega Tipp nimi Isendiväli, väärtuseks on sõne -

Graafi kujutamiseks vajalikud klassid Tipp Klass nimega Tipp nimi Isendiväli, väärtuseks on sõne - tipu nimi ehk märgend, 0 või enam sümbolit Kaar Klass nimega Kaar algus. Tipp Isendiväli, vääruseks on viit isendile klassist Tipp lpp. Tipp Isendiväli, vääruseks on viit isendile klassist Tipp nimi Isendiväli, väärtuseks on sõne - kaare nimi ehk märgend, 0 või enam sümbolit Graaf Klass nimega Graaf tipud kaared Isendiväli, väärtuseks on tippude (klassi Tipp isendite) järjend Isendiväli, vääruseks on kaarte (klassi Kaar isendite) järjend . . . Isendimeetodid – funktsioonid, mis kasutavad klassi Graaf isendi andmeid 12

# -*- coding: latin-1 -*class Tipp: """ Klass nimega Tipp """ # Isendiväli: def

# -*- coding: latin-1 -*class Tipp: """ Klass nimega Tipp """ # Isendiväli: def __init__(self): self. nimi = '' # selle tipu nimi e. märgend # ------------------ class Tipp. Klassid Pythonis Isendiväljad ja nende algväärtustamine kirjeldatakse funktisoonis __init__(self), kusjuures välja nime ette kirjutatakse veel “self. ”. Klassi isend luuakse avaldisega Klassi. Nimi(), nt class Kaar: Tipp() """ Klass nimega Kaar """ # Isendiväljad: Kaar() def __init__(self): self. algus. Tipp = Tipp() # selle kaare algustipp Graaf() self. lpp. Tipp = Tipp() # selle kaare lõpptipp Seejuures isendiväljad algväärtustatakse nii, nagu self. nimi = '' # selle kaare nimi e. märgend sätestatud vastavas funktsioonis __init__() # ------------------ class Kaar. class Graaf: """ Klass nimega Graaf """ # Isendiväljad: def __init__(self): self. tipud = [] # selle graafi tipud self. kaared = [] # selle graafi kaared Isendiväljad on avalikud, st kõikjal, pärast isendi loomist, nt k = Kaar() # luua Kaar isend, selle viit omistada k-le saab neid kasutada, nt k. nimi = ‘b’ # kaare k väljale nimi omistada ‘b’ # Isendimeetodid: def lisada. Tipp(self, tipp): Isendimeetodid on samuti avalikud. Nende # Antud: tipp -- isend klassist Tipp # Tulem: antud tipp lisatud selle graafi tippude järjendisse rakendusel aga esimene argument puudub. self. tipud. append(tipp) g = Graaf() # tehakse tühi graaf g t =Tipp() # tehakse tühja nimega tipp def lisada. Kaar(self, kaar): # Antud: kaar -- isend klassist Kaar g. lisada. Tipp(t) # graafi g lisatakse tipp t # Tulem: antud kaar lisatud selle graafi kaarte järjendisse # NB! Ei kontrollita, kas antud kaare algus ja lõpptipp (juba) kuuluvad selle graafi tippude hulka self. kaared. append(kaar) 13

Graafi uurimine Pythonis Olgu vajalike klasside ja funktsioonide kirjeldused koondatud moodulisse Graaf. py (vt

Graafi uurimine Pythonis Olgu vajalike klasside ja funktsioonide kirjeldused koondatud moodulisse Graaf. py (vt http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Programmid/ ) Uuritav graaf on tabelesituses failis graaf. txt (loodud Java-programmi Graafitoimeti töö kägus). Seda graafi kujutav klassiisendite (Tipp, Kaar, Graaf) struktuur luuakse Python-programmis korraldusega: g = graaf. Failist('graaf. txt') Edasi saab juba kasutada graafi g isendivälju nt, g. tipud ja isendimeetodeid (funktsioone) kujul g. funktsiooni. Nimi(argumendid) Näide eeldusel, et moodul Graaf on otsimisteel: from Graaf import * # milline on suurim arv ühte ja samasse tippu sisenevaid kaari? g = graaf. Failist('graaf. txt') # luuakse Graafi isend (viit omistatakse muutujale) g senini. Suurim. Sisendaste = 0 for t in g. tipud: # kasutatakse g isendivälja tipud t. Sisendaste = g. sisendaste(t) # rakendatakse g isendimeetodit sisendaste if (t. Sisendaste > senini. Suurim. Sisendaste): senini. Suurim. Sisendaste = t. Sisendaste 14 print "Tipu suurim sisendaste selles graafis on " + str(senini. Suurim. Sisendaste)

Klassi Graaf täiendamine uute isendimeetoditega Pythonistid: Kirjutada kõrvalolevatele funktsioonidele sisud ja lisada need funktsioonid

Klassi Graaf täiendamine uute isendimeetoditega Pythonistid: Kirjutada kõrvalolevatele funktsioonidele sisud ja lisada need funktsioonid klassi Graaf isendimeetoditeks. Testida lisatud isendimeetodid. Javakad: vt jrgm slaid Töö nr 4 Tähtaeg: 29. 03. 2010 Saata: jyri. kiho@ut. ee def n(self): # tagastatakse selle graafi tippude arv def m(self): # tagastatakse selle graafi kaarte arv def tipp. Nr(self, i): # tagastatakse selle graafi tipp nr i (NB! Graafi esimene tipp on numbriga 1) # kui sellise numbriga tippu ei ole, tagastatakse tühiviit None def otsida. Kaar(self, tipp 1, tipp 2): # tagastatakse selle graafi kaar (tipp 1; tipp 2) # kui sellist kaart ei ole, tagastatakse tühiviit None def tipu. Nr(self, tipp): # tagastatakse antud tipu number selles graafis (0, kui tipp pole selles graafis) def aste(self, t): # Antud: selle graafi tipp t # Tulem: tagastatakse t väljundaste -- kaarte arv, mis lähtuvad tipust t def naabertipud(self, tipp): # tagastatakse antud tipust lähtuvate kaarte lõpptippude järjend def valjuvad. Kaared(self, tipp): # tagastatakse antud tipust väljuvate kaarte järjend 15

Javakad: Koostada klassid Tipp, Kaar, Graaf nagu slaidil 12. Klassi Graaf lisada 1) klassimeetod

Javakad: Koostada klassid Tipp, Kaar, Graaf nagu slaidil 12. Klassi Graaf lisada 1) klassimeetod graafi sisestamiseks, kui graafi tabelesitus (vt slaid 11) paikneb tekstifailis. 2) Isendimeetod to. String(), mis tagastab selle graafi tabelesituse. Testida. 16

Tähtaeg: 05. 04. 2010 Saata: jyri. kiho@ut. ee Töö nr 5 Graafitöötlus Kirjutada ja

Tähtaeg: 05. 04. 2010 Saata: jyri. kiho@ut. ee Töö nr 5 Graafitöötlus Kirjutada ja testida 2 Graafi isendimeetodit: Ülesanne 5. 1. See graaf teisendada sümmeetriliseks: kui kahe tipu x ja y vahel on kaar (x; y) ja vastandkaart (y; x) ei ole, siis lisada graafi kaar (y; x) mille märgend võrdub kaare (x; y) märgendiga A A B C D Ülesanne 5. 2. Eeldusel, et see graaf on sümmeetriline, kontrollida, kas selles graafis leidub tsükleid. Võimalik idee: eemaldada korduvalt tippe, mille aste on 0 või 1, kui enam eemaldada ei saa, siis kui järgi jäi tühi graaf, siis tsükleid ei olnud (vastasel korral oli). 17

Kahendpuu ja selle läbimine Klassitöö (9. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid).

Kahendpuu ja selle läbimine Klassitöö (9. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid). Selles on täiendatud 2. klassi Tipp märgendikäitlust ning klassi Graaf lisatud funktsioone juhuks, kui see 3. graaf on kahendpuu. 4. 2. Valmistada mingi kahendpuu (milles on nt 7 tippu). Selleks luua kausta 5. aa. Praktikum alamkaust teema 6 (vt slaid nr 2) ja laadida sinna programm 6. Teha. Kahendpuu. class. Kaustas teema 6 olles käivitada käsurealt 7. Windows: java -cp. ; . . abiclasses Teha. Kahendpuu 7 java -cp. : . . /abi/classes/ Teha. Kahendpuu 7 Sellega luuakse juhu-kahendpuu ja näidatakse seda ekraanil (Graafitoimeti abil). Graafitoimeti salvestab pidevalt ekraanil oleva graafi jooksva seisu faili graaf. txt graafi tabelesitusena. Lihtsama kahendpuu faili graaf. txt võib kirjutada käsitsi, nt 1) A[72; 30] --> 2 --> 3 2) B[30; 78] 3) C[114; 78] --> 4 4) D[150; 126] --> 5 5) E[174; 174] mida saab vaadata samuti Graafitoimeti abil 3. Realiseerida kahendpuu läbimise algoritmid kolme programmina, mis väljastavad kahendpuu tippude nimed (märgendid) vastavalt ees-, kesk- ja lõppjärjestuses. 4. Kirjutada programm, mis juhuslikul viisil kirjutab kahendpuu iga lehe märgendiks täisarvu ja iga muu tipu märgendiks ühe tehtemärkidest + - *. 18

Tähtaeg: 12. 04. 2010 Saata: jyri. kiho@ut. ee Töö nr 6 Kahendpuu Kirjutada programm

Tähtaeg: 12. 04. 2010 Saata: jyri. kiho@ut. ee Töö nr 6 Kahendpuu Kirjutada programm kahendpuuna antud aritmeetilise avaldise väärtuse arvutamiseks. Kahendpuu lehtede (alluvateta tippude) märgenditeks on täisarvud. Kahendpuu juure ja iga vahetipu märgendiks on tehtemärk (+ või - või *). Kui tipul on ainult üks alluv, siis loetakse teiseks alluvaks leht märgendiga 1. Antud: Puuduvatega täiendatud: * - * + 81 1 47 Väärtus: (( 1 -47 ) + 1 ) * 1 47 81 = -3645 19

Kahendotsimispuu Klassitöö (10. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid). 2. Selles on

Kahendotsimispuu Klassitöö (10. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid). 2. Selles on parandatud kahendpuu tipule alluva lisamise funktsioon lisada. Alluv(…) 3. ja lisatud isendimeetod selle graafi väljastamiseks tekstifaili(self, f. Nimi). 2. Kirjutada ja testida programm, milles on • funktsioon lisada. Element( ) ühe arvu lisamiseks kahendotsimispuusse; • funktsioon kop_massiivist( ) antud arvumassiivist vastava kahendotsimispuu tegemiseks. Vt ka Kop. Mall. py (http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Programmid/Kop. Mall. py) Soovitatav on töötada kausta aa. Praktikum alamkaustas teema 7 (vt slaid nr 2). Sinna tuleb laadida ka programm Vaata. Kahendpuud. class. Kahendpuu (graaf. txt) vaatamiseks (kaustas teema 7 olles) käivitada käsurealt java -cp. : . . /abi/classes/ Vaata. Kahendpuud Windows: java -cp. ; . . abiclasses Vaata. Kahendpuud 20

Kahendotsimispuu Töö nr 7 Tähtaeg: 27. 04. 2010 Saata: jyri. kiho@ut. ee Koostada ja

Kahendotsimispuu Töö nr 7 Tähtaeg: 27. 04. 2010 Saata: jyri. kiho@ut. ee Koostada ja testida kahendotsimise puu käitlemise programm vastavalt mallile Kop. Mall. py. 21

Paisksalvestus Klassitöö (11. praktikum) Andmekogum koosneb üliõpilaste kirjetest; kirje võti asub kirje teisel väljal,

Paisksalvestus Klassitöö (11. praktikum) Andmekogum koosneb üliõpilaste kirjetest; kirje võti asub kirje teisel väljal, vt http: //vvv. cs. ut. ee/~kiho/ads/spring 10/aa. Praktikum/teema 8/ryhm. txt Koostada programm, mis aitaks katsetada, millise tabeli pikkuse ja paiskfunktsiooni korral esineb kõige vähem kollisioone (tudengite puhul failist ryhm. txt). Printida kollisioone tekitavate paaride kirjed. 22

Graafi laiuti läbimine Klassitöö (12. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid). Moodulisse

Graafi laiuti läbimine Klassitöö (12. praktikum) 1. Värskendada moodul Graaf. py (kaustast Programmid). Moodulisse on lisatud klassi Tipp isendimeetodid: • graafi tipule (abi)muutuja lisamise/muutmise funktsioon seada. Muutuja(self, muutuja. Nimi, muutuja. Vaartus) • funktsioon tipu abimuutuja väärtuse lugemiseks muutuja(self, muutuja. Nimi) Muutuja paikneb tipu nimes kujul muutuja. Nimi=muutuja. Vaartus; Näiteks, kui t on tipp nimega P ja koordinaatidega 187 ning 130, siis pärast t. seada. Muutuja(‘vaadeldud’, ‘ 1’) ja t. seada. Muutuja(‘eellane’, ‘ 9’) on selle tipu nimeks eellane=‘ 9’; vaadeldud=‘ 1’; P[187; 130] ning avaldiste muutuja(‘eellane’) ja muutuja(‘vaadeldud’) väärtusteks on vastavalt ‘ 9’ ja ‘ 1’. 2. Kirjutada ja testida funktsioon, mis leiab ühe (elementaar)tee kahe antud tipu vahel antud graafis, kasutades graafi laiuti läbimist. Vt ka Laiuti. Mall. py (http: //vvv. cs. ut. ee/~kiho/ads/spring 10/Programmid/Laiuti. Mall. py) Testimiseks rakendada koostatud funktsiooni ka leidmaks kõiki tippe, milleni antud tipust teed ei leidu. Üheks testgraafiks võtta 23 http: //vvv. cs. ut. ee/~kiho/ads/spring 10/aa. Praktikum/teema. Gr. Laiuti/graaf. txt

Töö nr 8 Tähtaeg: __. 05. 2010 Saata: jyri. kiho@ut. ee Ülesanne antakse praktikumis,

Töö nr 8 Tähtaeg: __. 05. 2010 Saata: jyri. kiho@ut. ee Ülesanne antakse praktikumis, individuaalselt. 24

Graafi sügavuti läbimine Klassitöö (13. praktikum) Kirjutada ja testida funktsioon, mis leiab ühe elementaartee

Graafi sügavuti läbimine Klassitöö (13. praktikum) Kirjutada ja testida funktsioon, mis leiab ühe elementaartee kahe antud tipu vahel antud graafis, kasutades graafi sügavuti läbimist. Funktsiooni (Pythonis) väline spetsifikatsioon: def leida. Tee(g, a, b): # Antud: graaf g ja selle kaks tippu a ning b # Tulemus: leitud (üks) elementaartee tipust a tippu b # tee on määratud muutujatega 'eellane' (alates tipust b) # kui teed ei leitud, siis b. eellane on määramata # Algoritm: sügavuti läbimine Graafi tipule (abi)muutuja lisamise/muutmise funktsioonid moodulis Graaf. py on seada. Muutuja(self, muutuja. Nimi, muutuja. Vaartus) ja muutuja(self, muutuja. Nimi) (vt ka slaid 23). Üheks testgraafiks võtta http: //vvv. cs. ut. ee/~kiho/ads/spring 10/aa. Praktikum/teema. Gr. Laiuti/graaf. txt 25