1 / 47

Algoritmid ja andmestruktuurid

Algoritmid ja andmestruktuurid. Praktikum 20 10 /201 1 kevadsemestril J. Liivi 2-20 3 , N 12-14 Jüri Kiho. Osavõtt praktikumidest vajalik: Kodutööd antakse ainult praktikumides ja kontrollitakse (lõplikult) samuti praktikumides.

merv
Télécharger la présentation

Algoritmid ja andmestruktuurid

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmid ja andmestruktuurid Praktikum 2010/2011 kevadsemestril J. Liivi 2-203, N 12-14 Jüri Kiho

  2. Osavõtt praktikumidest vajalik: Kodutööd antakse ainult praktikumides ja kontrollitakse (lõplikult) samuti praktikumides. Praktikumitööd tuleb teha reeglina kohapeal (J. Liivi 203). Praktikumi alguses väike test. Paarisprogrammeerimine lubatud (ja soovitatav). Programmeerimiskeel: python (vers. 3.1) Programmeerimiskeskkond: Amadeus_AlgPython (väga soovitatav).

  3. Praktikum 1 • Keskkonna Amadeus_AlgPython installeerimine • Sorteerimise ajalise keerukuse katseline hindamine • Alamhulkade läbivaatamine • Kodune ülesanne nr 1 Praktikum 1

  4. Keskkonna Amadeus_AlgPython installeerimine I. Keskkonnamuutuja PATH peab sisaldama teed Java programmini jar.exe Kontrollimiseks Widowslogo+R … cmd … jar -u Kui 'jar' is not recognized as an internal or external command, operable program or batch file. siis seda teed veel pole. Tee lisamiseks saab abi: http://courses.cs.ut.ee/2010/sylearvuti/Main/Juhend08 II. Teha praktikumi (ja/või Amadeus_AlgPython jaoks) jaoks tühi kaust, soovitatavalt nimega AlgPython. Sinna laadida AlgPythonStarter.jar aadressilt http://www.cs.ut.ee/~kiho/AlgPythonDownload.shtml KaustasAlgPython käivitada AlgPythonStarter.jar Praktikum 1

  5. III. Seadistada projektifailis (vasakus aknas): Skeemiikooni avamiseks: hiire paremklõps. Langkriips (\): Alt+…, mitte AltGr+… C:\Python31\python vmt Salvestada muudetud projekt: Fail+Eksportida Kirjutada programmide loetellu projekti viimases sektsioonis uue programmi nimi, nt proov.algpy Salvestada muudetud projekt: Fail+Eksportida Praktikum 1

  6. Kolmekordne hiire vasakklõps programmi nimel projektiaknas avab (uue) programmi parempoolses aknas. Kirjutada programm. Liitdirektiivid nagu for, if, def … teha skeemidena, klahv F1 Programmi käivitamine kaasneb alati salvestamisega: Fail+Salvestada NB! Programmi nimes ei tohi olla tühikut. Praktikum 1

  7. IV. Olemasoleva *.algpy programmi, nt pp.algpy lisamine projekti: Salvestada fail pp.algpy töökausta AlgPython\workspace. Kirjutada programmide loetellu (projekti viimases sektsioonis) lisatava programmi nimi pp.algpy Salvestada muudetud projekt: Fail+Eksportida Praktikum 1

  8. Lisada oma projekti programmid graafikud.algpy - valemina antud funktsioonid ajavott.algpy - sorteerimismeetodi ajakulu graafikudTabelist.algpy - tabelina antud funktsioonid alamhulgad.algpy - kõik alamhulkad või elementide kombinatsioonid Katsetamiseks: avada (3xhiire-vasak programmi nimel) ja salvestada (Fail+Salvestada) Praktikum 1

  9. Praktikumitöö 1-1 Sorteerimise ajalise keerukuse katseline hindamine: Ühele joonisele kujutada tööaja graafikud sorteerimismeetoditele pisteSort, kiirSort ja (pythoni) sorted Praktikum 1

  10. Kodutöö nr 1 Hulga alamhulkade läbivaatamine, elementide kombinatsioonid Tähtaeg: 24.02.2011 Näidisülesandeid: 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. C. Seljakotiülesande mingi (muu) variant. Praktikum 1

  11. Praktikum2,3 “MinuMakrod” Rekursioon Ekraanigraafika • KaustasAlgPython käivitada AlgPythonStarter.jar • (eeldusel, et Amadeus_AlgPython on juba installeeritud, vt Praktikum 1) Kui peaks küsitama siis (tavaliselt) sobib vastata Jah , sest olete eelmiselt seansilt lahkunud ilma oma projektifaili viimast seisu talletamata (eksportimata). Praktikum 2,3

  12. Uuemad nõuded Kodutöö esitamise tähtaeg on kaks nädalat, kõige viimane esitamise (*.algpy Moodle’isse laadimise) aeg on töö seades näidatud kuupäeva viimane sekund. Pärast seda saab küll esitada veel 7 ööpäeva jooksul, aga nii esitatud töö hinne alandatakse 40% võrra. Tuleb kasutada versiooni Python 3.1, selleks muuta oma projektifailis rida sektsioonis Paths : Python: C:\Python31\python Kodutöö programm peab olema mõistlikult kommenteeritud. Alguses peab kindlasti olema sissejuhatav osa (preambul), milles on (vähemalt) töö nr, autori nimi, kokkuvõttev pealkiri, ülesande püstitus. Iga funktsioonikirjelduse alguses peab olema selgitus (spetsifikatsioon), iseloomustamaks mis on antud ja mis on tulemus/tagastatakse. (Kommenteerimisel on soovitatav kasutada makrosid, vastavalt Alt+a ja Alt+def. Makrode rakendamist ja loomist selgitatakse järgnevas.) Praktikum 2,3

  13. Oma makrode kasutamine 1. Laadida (esialgne oma makrode näidis) fail MinuMakrod.xml  oma kausta AlgPython\macros 2. Tekstifailis AlgPython\Amadeus.properties lisada selle faili nimi: myMacros= AltGrMacro Kirillitsa MinuMakrod.xml (ja muidugi salvestada). 3. Sulgeda ja taaskäivitada (AmadeusAlgPythonStarter.jar) 4. Aktiveeritud makrod on näha kõige esimeses aknas: (projektifaili taga ehk Raam>Loend>0.Amadeus) Neid võib seal (proovimiseks) ka vabalt muuta; kuid muudatused kaovad koos seansi lõpuga. 5. Makro rakendamiseks (programmi teksti toimetamisel), nt: Alt+a Alt+def jne (üldiselt: Alt+makro) Praktikum 2,3

  14. Oma (uute) makrode tegemine Oma makrode permanentseks muutmiseks/lisamiseks redigeerida fail MinuMakrod.xml . Selleks tuua makrode fail projektivälisesse aknasse: Raam>Uus>Fail>Importida … AlgPython\macros\ MinuMakrod.xml Seal siis toimetada. Muidugi tuleb hoiduda oma uue makro nimetamisest juba kasutusel oleva nimega. Lõpuks Fail>Eksportida … (AlgPython\macros\ )MinuMakrod.xml Makrode muudatused rakenduvad pärast taaskäivitamist. Praktikum 2,3

  15. Rekursioon Praktikumitöö 2,3 -1 A. Koostada ja testida rekursiivne meetod (funktsioon) korrutis järjestikuste täisarvude korrutise leidmiseks, kui on antud esimene ja viimane tegur. Lisada 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!) vastasel korral (korrutis(k+1…n) / (n-k)!) Kasutada funktsiooni korrutis. • B. • Realiseerida rekursiivne algoritm • järjendi negatiivsete elementide loendamiseks • nagu testis koostatud • järjendi pooleks jagamise abil • Juhujärjendi genereerimise funktsiooni näidis on saadaval: Alt+juhuj Praktikum 2,3

  16. Rekursioon Praktikumitöö 2,3 -2 Hanoi tornide ülesanne. Näiteprogramm: HanoiGr.jar Kirjutada programm, mis väljastab konsoolile Hanoi tornide ülesande lahenduskäigu juhul, kui ketaste arv on n. Näiteks n = 3 korral väljastatakse käigud: 1-->2 1-->3 2-->3 1-->2 3-->1 3-->2 1-->2 Praktikum 2,3

  17. Praktikumitöö 2,3 -3 Rekursioon Ekraanigraafika (tkinter) Kirjutada programm rekursiivse mustri joonistamiseks (ruut, selles ring, selles ruut, selles ring, …), skaleeruvana koos tahvliga: Ekraanigraafika šabloonprogramm on saadaval: Alt+gr Enne proovikäivitust lisada algusesse veel preambul: Alt+a http://effbot.org/tkinterbook/canvas.htm -- tahvel (canvas) http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm -- kuularid http://effbot.org/tkinterbook/ -- kogu raamat Praktikum 2,3

  18. Praktikumitöö 2,3 -4 Ekraanigraafika Rekursioon A. Kirjutada programm Eesti lipu kuvamiseks, skaleeruvana koos tahvliga. Eesti lipu mõõdud on 7:11, lipu sinise värvitooni RGB: 31 69 169 ehk 16-nd süsteemis 1f 45 a9. B. Mõelda välja Eesti lipuga seonduv rekursiivne muster. Kirjutada programm selle rekursiivse mustri joonistamiseks. Näide: Praktikum 2,3

  19. Magasin Järjekord Praktikum4 Praktikumitöö 4 - 1 Magasin Realiseerida magasin keeles Pyhton vastavalt realisatsiooniskeemile magasin.algpy. Lülitada see fail oma projekti, st salvestada magasin.algpy töökausta workspace ning nimi magasin.algpy lisadaprojekti programmide loetellu. Praktikumitöö 4 - 2 Järjekord Realiseerida järjekord keeles Pyhton vastavalt realisatsiooniskeemile järjekord.algpy. Lülitada see fail oma projekti, st salvestada järjekord.algpy töökausta workspace ning nimi järjekord.algpy lisadaprojekti programmide loetellu. Näpunäide. Soovitatav on silmas pidada järjendiga (a) seotud operatsioone, nagu len(a), a.append(x), a.pop( ), a.insert(i, x). Vt ka http://docs.python.org/tutorial/datastructures.html Praktikum 4

  20. Kodutöö nr 2 – antakse praktikumis individuaalselt. NB! Koostatavas programmis tuleb kasutada praktikumitööna realiseeritud magasini- või järjekorraoperatsioone. Praktikum 4

  21. Klass Graaf Kahendpuu Praktikum5 • Laadida töökausta workspace vajalikud vahendid: • Java käivitatav moodul SebiGraafi.jar • Java käivitatav moodul SebiPuud.jar (vajalik edaspidi) • Java käivitatav moodul SebiKPuud.jar • Pythoni moodul Graaf.py, • selle selgem ülevaade Graaf.algpy • Praktikumitöö hakatus P5kahendpuu.algpy Praktikum 5

  22. Harjutus 1. Juhugraafi valmistamine Teha juhugraaf, milles on vähemalt 10 tippu. Selleks avada käsurea aken ( +r), minna kausta workspace, seal käivitada: >workspace java -jar SebiGraafi.jar -juhu 15 4 graaf.txt 1) Kui tekkinud graafi joonisel on vähem kui 10 tippu, siis katkestada programmi töö (käsurea aknas Ctrl+c) ja käivitada uuesti ( ). Paigutada joonisel graafi tipud ümber selliselt, et jääks võimalikult vähe lõikuvaid kaari. Vaadata graafi faili “graaf.txt” kaustas workspace tavalise tekstina. 1) Täielik sebimismoodulite kasutusjuhend vt Sebimine.ppt. Praktikum 5

  23. Harjutus 2. Juhupuu valmistamine Teha juhu-kahendpuu, milles on täpselt 10 tippu. [Selleks avada käsurea aken ( +r), minna kausta workspace, seal käivitada:] >workspace java -jar SebiKPuud.jar -juhu 10 kpuu.txt Lisada kahendpuule (märgendita) tippe nii, et igal tipul oleks kas 2 või 0 alluvat. Taolist puud nimetame käesolevas 2-0-kahendpuuks. Vaadata graafi faili “kpuu.txt” kaustas workspace tavalise tekstina. Praktikum 5

  24. Praktikumitöö 5-1. Tipumärgendite seadmine Viige programm P5kahendpuu.algpy töökorda.Võtke programm oma projekti, lisades programmide nimekirja selle nime (P5kahendpuu.algpy). Programmi lähteandmeteks on 2-0-kahendpuu (graaf) failis kpuu.txt, töö tulemus aga salvestatakse faili kpuu1.txt. Viimase vaatamiseks: >workspace java -jar SebiKPuud.jar kpuu1.txt Programm kasutab moodulit Graaf.py, selle sisu paremaks vaatamiseks avage Graaf.algpy (näiteks Raam>Uus>Fail>Importida … workspace …Graaf.algpy). Moodulis Graaf on kirjeldatud klassid Tipp, Kaar, Graaf. Kaar on tipupaaride järjend, Graaf koosneb tippude järjendist ning kaarte järjendist. Kui mingis klassis K on defineeritud funktsioon f(self, a, b, c), siis saab seda rakendada selle klassi mingi isendi k jaoks: k.f(a, b, c), st esimene parameeter (klassi isend) antakse funktsiooni ees punktiga (mitte funktsiooni nime f järel sulgudes). Näiteks, kuna klassis Tipp leidub funktsioon seadaMargend(self, m), saab toimida nii: t = Tipp() --- luuakse klassi tipp isend ja (selle viit) omistatakse muutujale t t.seadaMargend(‘xxx‘) --- tipu (klassi Tipp isendi) t märgendiks omistatakse ‘xxx’. Mingis klassis K kirjeldatud väli self.v leidub igas selle klassi isendis k, sellele viidatakse k.v. Kuna klassis Graaf leidub väli (järjend) self.tipud, siis olles loonud isendi, nt g = graafFailist(“…”), saab teha nt tsükli üle g tippude: for t in g.tipud: … Praktikum 5

  25. SebiKPuud P5kahendpuu g = graafFailist(“kpuu.txt”) --- antud … … … g.faili(“kpuu1.txt”) --- tulemusgraaf kpuu.txt • A a3 • B … • C … Klassi Graaf isend g Graaf tipud: [<A>, <B>, <C>…] kaared: [(<A>, <C>, a), …] … … töö- delda g … kpuu1.txt • … • …

  26. Praktikumitöö 5-2. Arvutamine kahendpuus Lisada programmile P5kahendpuu.algpy funktsioon 2-0-kahendpuuna antud avaldise arvutamiseks. Soovitatav skeem: avaldise_väärtus(g, t) --- Antud: aritmeetiline avaldis 2-0-kahendpuuna g, --- (st igas lehes on arv, igas vahetipus tehtemärk) --- ja üks selle graafi tippudest t --- Tulemus: vastuseks leitakse tipust t algava (osa)avaldise väärtus Kui t on leht graafis g, siis on vastuseks …, --- baasjuht vastasel korral on vastuseks … op …, kus op on tipus t olev tehe Testida selle funktsiooni tööd programmi lõppu lisatud vastava testi abil. Praktikum 5

  27. Praktikumitöö 5-3. Kahendpuu teisendamine Lisada programmile P5kahendpuu.algpy funktsioon, mis antud kahendpuu teisendab 2-0-kahendpuuks sel teel, et igale ühe alluvaga tipule lisab puudunud alluva kohale ühe (märgendita) tipu. Programm peab nüüd töötama suvalise (mitte 2-0-)kahendpuu korral. Selle tagamiseks rakendada lisatud funktsiooni failist sisestatud kahendpuule enne juhuavaldiseks tegemist. Testida! Praktikum 5

  28. Kahendpuu Puu Graaf Praktikum6 I. Etüüdid kahendpuul Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf

  29. II. Etüüdid puul III. Etüüdid graafil

  30. Kodutöö nr 3 – antakse praktikumis individuaalselt. NB! Koostatavas programmis tuleb kasutada olemasolevat moodulit Graaf (from Graaf import*). Seda moodulit muuta ei tohi. Kõik programmis esinevad funktsioonid peavad olema lakoonilised, aga kommenteeritud; eriti oluline on funktsiooni nn väline spetsifikatsioon Antud: … Tulemus: … Kõik programmis esinevad funktsioonid peavad olema testitud-silutud. Kõiki teste (programmi testimislõike) ei pea koos programmiga esitama.

  31. Kordused jadas Kirje võti Python: lambda Praktikum7 MinuMakrod.xml – täiendatud versioon saadaval. Laadida see uuesti kausta AlgPython\ macros (kui ise pole makrosid lisanud) või kopeerida sellest uued makrod (vastasel korral). • Arendada programm, mille lähteversioon on P7kordused0.algpy. • Korduvate elementide otsimine antud järjendis • Korduvate võtmetega elementide otsimine: antud on nii järjend kui ka funktsioon (võtmefn) elemendi võtme arvutamiseks • Korduvate võtmetega elementide otsimine, kui on antud kas mõlemad – järjend ja võtmefn või ainult järjend; viimasel juhul võtmefn on samasus f(x) = x • Rakendada loodud programmi kirjefaili protokoll.txt uurimiseks, lugedes kirje võtmeks • a) pere- ja eesnime (kirje.split(’\t’)[1]) • b) perenime • c) eesnime • Tekstifaili sisestamiseks: funktsioon txtin (makro Alt+txtin).

  32. 1. Korduvate elementide otsimine antud järjendis Väljund ------------- TEST 1 (arvujada) ----------- [14, 12, 21, 17, 20, 15, 22, 12, 15, 21, 25, 12, 13] 12 esineb 3 korda 21 esineb 2 korda 15 esineb 2 korda unikaalseid 6 (46%) ------------- TEST 2 (sonejada) ----------- ['Kask Ants', 'Paju Aili', 'Ilves Toomas', 'Kana Sirje', 'Kask Ants', 'Kukk Vello', 'Paju Aili', 'Hunt Margus', 'Paju Aili', 'Kõiv Ants', 'Paju Aiki', 'Rebane Toomas'] Kask Ants esineb 2 korda Paju Aili esineb 3 korda unikaalseid 7 (58%) Praktikum 7

  33. 2 ja 3. Korduvate võtmetega elementide otsimine Väljund ------------- TEST 3 (sonejada, erinevad votmed) ----------- ['Kask Ants', 'Paju Aili', 'Ilves Toomas', 'Kana Sirje', 'Kask Ants', 'Kukk Vello', 'Paju Aili', 'Hunt Margus', 'Paju Aili', 'Kõiv Ants', 'Paju Aiki', 'Rebane Toomas'] Kask Ants esineb 2 korda Paju Aili esineb 3 korda unikaalseid 7 (58%) Perekonnanimesid arvestades: Kask esineb 2 korda Paju esineb 4 korda unikaalseid 6 (50%) Eesnimesid arvestades: Ants esineb 3 korda Aili esineb 3 korda Toomas esineb 2 korda unikaalseid 4 (33%) Praktikum 7

  34. Väljund ------------- TEST 4 (kirjejada) ----------- Kirjed failist protokoll.txt. Pere- ja eesnimesid arvestades: Walther Martin esineb 2 korda Oja Jaan esineb 2 korda Tarvis Peeter esineb 2 korda Salmu Peeter esineb 2 korda Anton Arno esineb 2 korda … unikaalseid 4759 (99%) Perenimesid arvestades: Hallika esineb 3 korda oim esineb 2 korda Lehis esineb 2 korda Raav esineb 2 korda Kesküla esineb 2 korda Fedotov esineb 2 korda Lehtmets esineb 3 korda Rohi esineb 2 korda … unikaalseid 2536 (53%) Eesnimesid arvestades: … 4. Kirjefaili protokoll.txt uurimine Kirje 1Aukland AndersNorra2:59:41M35 võtmeväli Vanuserühm Lõpuaeg Kust Kes Rinnanumber Väljad, eraldaja \t Võti: pere- ja eesnimi, vahel 1 tühik 1Aukland AndersNorra2:59:41M35 Võti: perenimi 1Aukland AndersNorra2:59:41M35 Võti: eesnimi

  35. Räsifunktsioon hash() Paiskfunktsioon Paisktabel Praktikum8 P8paiskfunktsioon.algpy TEST4 – Pythoni räsifunktsiooni hash() mõiste TEST5 – faili protokoll.txt korral uurida erinevaid paiskfunktsioone: millise korral on unikaalsete paiskväärtuste % suurim? Püüdke luua paiskfunktsioon, mille korral unikaalsete% > 74. TEST6 – rakendada samu paiskfunktsioone failil AAtegijad.txt ja võrrelda unikaalsete paiskväärtuste protsente TEST5 tulemustega. Tehke katseid erinevate M (paisktabeli mahu) väärtustega. Kodutöö nr 4 – antakse praktikumis individuaalselt.

  36. Praktikum9 Kahendotsimispuu Siin piirdume kahendotsimispuudega, milles kirjeks tipus on naturaalarv, kirje võtmeks aga see arv ise. Töötluse lihtsustamiseks on igal kahendotsimispuul juureks (fiktiivne) tipp kirjega -1, st kahendotsimispuu ei ole kunagi tühi (0-tipuline). Minimaalne kahendotsimispuu (milles ei ole ühtegi tegelikku kirjet) koosneb ainult sellest fiktiivsest tipust. Taolise graafi (otsipuu) tegemine: otsipuu = graafTabelesitusest("1) -1[0;0]") Praktikumitöö 9-1. Kirjutada ja testida funktsioon antud kirje lisamiseks antud kahendotsimispuusse. Praktikumitöö 9-2. Kirjutada ja testida funktsioon antud kirjejärjendist tasakaalulise kahendotsimispuu ehitamiseks. Praktikumitöö 9-3. Kirjutada ja testida funktsioon antud kirje leidmiseks antud kahendotsimispuust. Praktikumitöö 9-4. Kirjutada ja testida funktsioon antud kirje eemaldamiseks antud kahendotsimispuust. Praktikum 9

  37. Praktikum10 AVL-puu Etüüdid 10-1, 10-2, 10-3, 10-4, 10-5 vt AVL-etudes.algpy Joonised: http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf lk 33,34 Kodutöö nr 5 – antakse praktikumis individuaalselt.

  38. Praktikum11 Kahendkuhi Koostada ja testida realiseerimata funktsioonid mallis P11kahendkuhi.algpy Algoritmid: http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf lk 54-56

  39. Teksti pakkimine Huffmani koodipuu Praktikum12 Pakkimine 1. Teksti lugemine failist 2. Sümbolite sagedus (esinemise statistika) tekstis 3. Sisend S Huffmani jaoks (tipu märgendis asendatud sümbolid ‘tühik’, ‘[‘. ‘;’, ‘:’, ‘>’ ja ‘\n’) 4. Huffmani koodipuu loomine 5. Prefikskoodide tabeli koostamine koodipuu alusel 6. Pakitud teksti loomine ja selle pikkuse võrdlemine antud teksti pikkusega Lahtipakkimine 7. Originaalteksti taastamine koodipuud kasutades Ülesanne 6a: 1.+2.+3 Ülesanne 6b: 4. Eeldab Praktikum 11 tööd. Ülesanne 6c: 5.+6. Ülesanne 6d: 7. Mall: vt P12Huffman.algpy (kaustas Praktikum12)

  40. ------------- TEST 1 (sageduste sonastiku ja sageduste jada tegemine) Jatkamiseks vajutada Enter ... tekst = "a:b,c,c,b,b,[,];b;c;b, A" Sonastik d (symboli sagedus promillides): a 38.46 115.38 c 115.38 b 192.31 , 269.23 A 38.46 [ 38.46 : 38.46 ] 38.46 ; 115.38 Jada S: a:38.46 ty:115.38 c:115.38 b:192.31 ,:269.23 A:38.46 ns:38.46 ko:38.46 ]:38.46 sk:115.38

  41. ------------- TEST 2 (Huffmani koodipuu loomine) Jatkamiseks vajutada Enter ... Koodipuu: 1) 0:999.98[400;10] --> 3 --> 2 2) 0:576.91[340;60] --> 14 --> 4 3) 0:423.07[460;60] --> 13 --> 5 4) 0:307.68[40;110] --> 12 --> 6 5) 0:230.76[520;110] --> 11 --> 19 6) 0:192.3[160;160] --> 9 --> 7 7) 0:115.38[220;210] --> 16 --> 8 8) 0:76.92[280;260] --> 18 --> 15 9) 0:76.92[100;210] --> 10 --> 17 10) a:38.46[70;260] 11) ty:115.38[490;160] 12) c:115.38[10;160] 13) b:192.31[430;110] 14) ,:269.23[370;110] 15) A:38.46[250;310] 16) ns:38.46[190;260] 17) ko:38.46[130;260] 18) ]:38.46[310;310] 19) sk:115.38[550;160]

  42. ------------- TEST 3 (kooditabel, kodeerimine, vordlus) Jatkamiseks vajutada Enter ... Kooditabel: a 00100 A 001110 c 000 b 10 110 , 01 [ 00110 : 00101 ] 001111 ; 111 Kood: 001000010110010000100001100110010011001001111111101110001111001110110110001110 tekst = "a:b,c,c,b,b,[,];b;c;b, A" Teksti pikkus baitides: 26 Koodi pikkus baitides: 10 (37.5%) ------------- TEST 4 (lahtipakkimine) Jatkamiseks vajutada Enter ... Tulem = "a:b,c,c,b,b,[,];b;c;b, A" Orig = "a:b,c,c,b,b,[,];b;c;b, A"

  43. Kodutöö nr 6 Rühmatöö tiimid: juht (ül 6b) liikmed Rühmatöö (2 inim.): 6b + 6a,c,d Laas Liivoja Kurg Rankla Rebane Tiidla M Trees Rühmatöö (3 inimest): 6b + 6a + 6c,d Rühmatöö (4 inimest): 6b + 6a + 6c + 6d Kirsimäe Merisalu Rühmatöö näidisplaan Kaasik Kruusmaa Timberg Tiidla P Loskit Moisto Valli Projekti tähtaeg 10. mai Esitada koos hindeettepanekutega liikmetele skaalal 100(oma osa tehtud) … 0(ei teinud midagi)

  44. Graafi läbimine Lühim tee graafis Praktikum13 P13-1: Koostada programm, mis kontrollib antud sümmeetrilise graafi sidusust graafi laiuti läbides. P13-2: Koostada programm, mis kontrollib antud sümmeetrilise graafi sidusust graafi sügavuti läbides. P13-3: Koostada programm, mis antud graafi sügavuti läbides väljastab kõik teed antud kahe tipu vahel, (vt ka P13_SygavutiTee.algpy kaustas Praktikum13). P13-4: Täiendada programmi nii, et koos iga teega väljastataks ka teepikkus (teel olevate kaarte pikkuste summa). P13-5: Koostada programm, mis antud graafi laiuti (Dijkstra meetodil) läbides väljastab lühima tee antud kahe tipu vahel. Eelmist programmi kasutada selle programmi korrektsuse testimiseks. http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf : 6.2, 6.3

  45. Tipuklassid Graafi minimaalne toes Kruskali algoritm Praktikum14 Graafi G joonis ilma kaari näitamata Tippude klass on tippude puukujuline (puuna esitatud) alamhulk, milles igal tipul on väli “viit” (ülemusele). Tipu t korral t.väli(“viit”) = tipu t ülemuse number (graafis G); t.väli(“viit”) = ‘0’, kui ülemust pole. Joonisel on need viidad punktiiris ja punased. H D C F A F K H B E D F ja C on klasside esindajad C A B Pärast ühendamist (vt sinine viit joonisel): F E H C D K K B E A F on klassi esindaja

  46. P14-1: Realiseerida klasside ühendamise algoritmid joonisel 3.5 http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf , lk 50. • P14-2: Realiseerida Kruskali algoritm joonisel 6.16 • http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf , lk 111 • (kasutades P14-1). • Võiks eeldada, et vaadeldav graaf on antisümmeetriline. Hulka S ei ole vaja pidada. • Soovitatav testimisskeem ~ : • Graaf g failist g.txt • A = Kruskal_toes(g) • Graafist g eemaldada kaared, mis ei kuulu toesesse (st hulka A) • (eelmise asemel lihtsam: g.kaared = A) • Graaf g faili g1.txt (visuaalseks kontrollimiseks) • Graaf g sümmeetriliseks • Väljastada: g on/ei ole sidus • Väljastada: g on/ei ole atsükliline. eemaldadaKaar(t1, t2) -- uuendatud moodulist Graaf.py (kaustas Praktikum14) P14-2 lahendus on tarvis esitada kodutöö nr 8 kättesaamiseks.

  47. Praktikum15 8-1 lahenduse skeem (saaks ka pisut lühemalt): Salvestada *.xls  *.csv või  *.txt (eraldajad vastavalt ‘,’ või ‘\t’) Tulemuses kohendada linna nimed (tühikuteta ja miinusteta) Teha maatriks M, kus rida ‘linna nimi’ edasi: nullid (0 ka diagonaalil) ja ühed M põhjal teha graaf g, tipu nimi = linnanimi + [0;0]; kaar, kui M-s on 1. Küsida alguslinna nr a, lõpplinna nr b Rakendada otseteede leidmist (raamat. Lk 107), alates tipust a Leida tee (revers) b, b.eellane, b.eellane.eellane … a Vastus, võimalik ka “Ei leidu”.

More Related