Algoritmid ja andmestruktuurid
Praktikum 2010/2011 kevadsemestrilJ. Liivi 2-203, N 12-14
Jüri Kiho
Osavõtt praktikumidest vajalik:
Kodutööd antakse ainult praktikumidesja 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).
Praktikum 1 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
Keskkonnamuutuja PATH peab sisaldama teed Java programmini jar.exe
Kontrollimiseks Widowslogo+R … cmd … jar -uKui
'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
I.
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
Kaustas AlgPython käivitada AlgPythonStarter.jar
Praktikum 1 5
III.Seadistada projektifailis (vasakus aknas):
C:\Python31\python vmt
Skeemiikooni avamiseks: hiire paremklõps.Langkriips (\): Alt+…, mitte AltGr+…
Salvestada muudetud projekt: Fail+Eksportida
Kirjutada programmide loetellu projekti viimases sektsioonis uue programmi nimi, ntproov.algpy
Salvestada muudetud projekt: Fail+Eksportida
Praktikum 1
Kolmekordne hiire vasakklõps programmi nimelprojektiaknas 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 nimesei tohi olla tühikut.
Praktikum 1 7
IV.Olemasoleva *.algpy programmi, nt pp.algpy lisamine projekti:
Kirjutada programmide loetellu (projekti viimases sektsioonis) lisatava programmi nimipp.algpy
Salvestada muudetud projekt: Fail+Eksportida
Salvestada fail pp.algpy töökausta AlgPython\workspace.
Praktikum 1 8
Lisada oma projekti programmid
graafikud.algpy - valemina antud funktsioonidajavott.algpy - sorteerimismeetodi ajakulugraafikudTabelist.algpy - tabelina antud funktsioonidalamhulgad.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 1Hulga alamhulkade läbivaatamine, elementide kombinatsioonid
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.
Näidisülesandeid:
Tähtaeg: 24.02.2011
Praktikum 2,3 11
Praktikum 2,3
Kaustas AlgPython 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).
“MinuMakrod”RekursioonEkraanigraafika
Praktikum 2,3 12
Uuemad nõudedKodutöö 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
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+aAlt+def jne (üldiselt: Alt+makro)
Oma makrode kasutamine
Praktikum 2,3 14
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.
Oma (uute) makrode tegemine
Praktikum 2,3 15
Praktikumitöö 2,3 -1
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
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.
Rekursioon
Praktikum 2,3 16
Praktikumitöö 2,3 -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 käigud:1-->21-->32-->31-->23-->13-->21-->2
Rekursioon
Hanoi tornide ülesanne.Näiteprogramm: HanoiGr.jar
Praktikum 2,3 17
Praktikumitöö 2,3 -3Kirjutada 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
RekursioonEkraanigraafika(tkinter)
Praktikum 2,3 18
Praktikumitöö 2,3 -4
B. Mõelda välja Eesti lipuga seonduv rekursiivne muster. Kirjutada programm selle rekursiivse mustri joonistamiseks. Näide:
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.
EkraanigraafikaRekursioon
Praktikum 4 19
Praktikum 4MagasinJärjekord
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 lisada projekti 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 lisada projekti programmide loetellu.
Näpunäide. Soovitatav on silmas pidada järjendiga (a) seotud operatsioone, nagulen(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 5 21
Praktikum 5KlassGraafKahendpuu
Laadida töökausta workspace vajalikud vahendid:
1. Java käivitatav moodul SebiGraafi.jar 2. Java käivitatav moodul SebiPuud.jar (vajalik edaspidi)3. Java käivitatav moodul SebiKPuud.jar
4. Pythoni moodul Graaf.py,5. selle selgem ülevaade Graaf.algpy
6. 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 seadmineViige 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
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 tt.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: …
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.
1) A a32) B … 3) C …
kpuu.txt
SebiKPuud
P5kahendpuu
g = graafFailist(“kpuu.txt”) --- antud
…
……g.faili(“kpuu1.txt”) --- tulemusgraaf
Graaf
tipud: [<A>, <B>, <C>…]
kaared: [(<A>, <C>, a), …]
…
1) … 2) …
kpuu1.txt
…töö-delda g…
Klassi Graaf isend g
Praktikum 5 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 6KahendpuuPuuGraaf
Nr Antud Tulemus Kasutab veel Rek
I-1 Kahendpuu ja selle tipp
Tagastatakse antud tipust algava (alam)kahendpuu kõrgus
+
I-2 Kahendpuu Tagastatakse True, kui üheski tipus alluvate kõrgus ei erine rohkem kui 1 võrra (st kahendpuu on tasakaalus), muidu False
Väli tipud klassis Graaf
F-n eelmisest etüüdist
-
I-3 Kahendpuu ja selle tipp
Väljastatud konsoolile antud tipust algava (alam)kahendpuu tippude märgendid keskjärjestuses
F-n märgend klassist Tipp +
I-4 Aritmeetilise avaldise kahendpuu ja selle tipp
Väljastatud konsoolile antud tipust algav aritmeetiline avaldis (infiks-kujul)
F-n märgend klassist Tipp
F-n aste klassist Graaf
+
I-5 Kahendpuu ja selle tipp
Tagastatakse antud tipu järglaste (vahetute ja kaugemate) koguarv
+
I-6 Kahendpuu ja selle tipp ning sellele tipule omistatav tasemenumber n
Antud tipust algava (alam)kahendpuu tippudele (tipuväljadele “tase”) omistatud tasemenumbrid:antud tipul “tase”= n, selle alluvatel n+1, …
F-n seadaVäli klassist Tipp +
I. Etüüdid kahendpuul Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf
Nr Antud Tulemus Kasutab Rek
II-1 Puu ja selle tipp Tagastatakse antud tipust algava (alam)puu kõrgus
F-n naabertipud klassist Graaf +
II-2 Puu ja selle tipp Tagastatakse antud tipu järglaste (vahetute ja kaugemate) koguarv
F-n naabertipud klassist Graaf +
II-3 Puu ja selle tipp Väljastatud konsoolile antud tipust algava (alam)puu vasak suluesitus
F-n aste klassist Graaf F-n märgend klassist TippF-n naabertipud klassist Graaf
+
II. Etüüdid puul
Nr Antud Tulemus Kasutab Rek
III-1 Graaf Antud graaf teisendatud sümmeetriliseks: graafile lisatud puudunud vastandkaared.
Kaare (t1, t2) vastandkaar on
(t2, t1); siin: sama nimega.
Väli kaared klassis GraafF-n otsidaKaar klassis GraafF-n lisadaKaar klassis GraafVäli algusTipp klassis KaarVäli lppTipp klassis KaarVäli nimi klassis Kaar
Kaare konstruktor: Kaar()
-
III-2 Sümmeetriline graaf
Tagastatakse True, kui selles graafis leidub tsükleid, False vastasel korral. (Eemaldada astmega 0 või 1 tippe; kui kõik sai eemaldada, siis tsükleid ei olnud.)
Väli tipud klassis Graaf
F-n aste klassist Graaf
F-n eemaldadaTipp klassist Graaf
Testimisel: f-n eelmisest etüüdist
-
III-3 Graaf ja selle tipp
Tagastatakse True, kui antud tipust algab puustruktuur, False vastasel korral.
F-n naabertipud klassist Graaf
F-n seadaVäli klassist TippF-n väli klassist Tipp
+
III. Etüüdid graafil
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 spetsifikatsioonAntud: …Tulemus: …
Kõik programmis esinevad funktsioonid peavad olema testitud-silutud. Kõiki teste (programmi testimislõike) ei pea koos programmiga esitama.
Praktikum 7Kordused jadasKirje võtiPython: lambda
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.
1. Korduvate elementide otsimine antud järjendis
2. Korduvate võtmetega elementide otsimine: antud on nii järjend kui ka funktsioon (võtmefn) elemendi võtme arvutamiseks
3. 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
4. Rakendada loodud programmi kirjefaili protokoll.txt uurimiseks, lugedes kirje võtmeks
a) pere- ja eesnime (kirje.split(’\t’)[1]) b) perenimec) eesnime
Tekstifaili sisestamiseks: funktsioon txtin (makro Alt+txtin).
Praktikum 7 32
------------- TEST 1 (arvujada) -----------[14, 12, 21, 17, 20, 15, 22, 12, 15, 21, 25, 12, 13]12 esineb 3 korda21 esineb 2 korda15 esineb 2 kordaunikaalseid 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 kordaPaju Aili esineb 3 kordaunikaalseid 7 (58%)
1. Korduvate elementide otsimine antud järjendis
Väljund
Praktikum 7 33
------------- 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 kordaPaju Aili esineb 3 kordaunikaalseid 7 (58%)
Perekonnanimesid arvestades:Kask esineb 2 kordaPaju esineb 4 kordaunikaalseid 6 (50%)
Eesnimesid arvestades:Ants esineb 3 kordaAili esineb 3 kordaToomas esineb 2 kordaunikaalseid 4 (33%)
2 ja 3. Korduvate võtmetega elementide otsimineVäljund
------------- TEST 4 (kirjejada) -----------
Kirjed failist protokoll.txt.Pere- ja eesnimesid arvestades:Walther Martin esineb 2 kordaOja Jaan esineb 2 kordaTarvis Peeter esineb 2 kordaSalmu Peeter esineb 2 kordaAnton Arno esineb 2 korda…unikaalseid 4759 (99%)
Perenimesid arvestades:Hallika esineb 3 kordaoim esineb 2 kordaLehis esineb 2 kordaRaav esineb 2 kordaKesküla esineb 2 kordaFedotov esineb 2 kordaLehtmets esineb 3 kordaRohi esineb 2 korda…unikaalseid 2536 (53%)
Eesnimesid arvestades:…
4. Kirjefaili protokoll.txt uurimine
Väljund
1 Aukland Anders Norra 2:59:41 M35
VanuserühmLõpuaegKustKesRinnanumber
Kirje
Väljad, eraldaja \t
võtmeväli
Võti: pere- ja eesnimi, vahel 1 tühik
1 Aukland Anders Norra 2:59:41 M35
Võti: perenimi
1 Aukland Anders Norra 2:59:41 M35
Võti: eesnimi
Praktikum 8Räsifunktsioon hash()PaiskfunktsioonPaisktabel
Kodutöö nr 4 – antakse praktikumis individuaalselt.
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.
Praktikum 9 36
Praktikum 9 Kahendotsimispuu
Praktikumitöö 9-1. Kirjutada ja testida funktsioon antud kirje lisamiseks antud kahendotsimispuusse.
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-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 10 AVL-puu
Etüüdid 10-1, 10-2, 10-3, 10-4, 10-5 vt
AVL-etudes.algpy
Kodutöö nr 5 – antakse praktikumis individuaalselt.
Joonised:http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf lk 33,34
Praktikum 11 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
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)
Praktikum 12Teksti pakkimineHuffmani koodipuu
------------- 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.38c 115.38b 192.31, 269.23A 38.46[ 38.46: 38.46] 38.46; 115.38
Jada S:a:38.46ty:115.38c:115.38b:192.31,:269.23A:38.46ns:38.46ko:38.46]:38.46sk:115.38
------------- TEST 2 (Huffmani koodipuu loomine)Jatkamiseks vajutada Enter ...
Koodipuu:
1) 0:999.98[400;10] --> 3 --> 22) 0:576.91[340;60] --> 14 --> 43) 0:423.07[460;60] --> 13 --> 54) 0:307.68[40;110] --> 12 --> 65) 0:230.76[520;110] --> 11 --> 196) 0:192.3[160;160] --> 9 --> 77) 0:115.38[220;210] --> 16 --> 88) 0:76.92[280;260] --> 18 --> 159) 0:76.92[100;210] --> 10 --> 1710) 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]
------------- TEST 3 (kooditabel, kodeerimine, vordlus)Jatkamiseks vajutada Enter ...
Kooditabel:a 00100A 001110c 000b 10 110, 01[ 00110: 00101] 001111; 111
Kood: 001000010110010000100001100110010011001001111111101110001111001110110110001110tekst = "a:b,c,c,b,b,[,];b;c;b, A"Teksti pikkus baitides: 26Koodi 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"
Kurg
Rankla
Rebane
Tiidla M
Trees
LaasLiivoja
KirsimäeMerisalu
Tiidla PLoskit
MoistoValli
KaasikKruusmaaTimberg
Rühmatöö tiimid: juht (ül 6b) liikmed
Projekti tähtaeg 10. mai
Esitada koos hindeettepanekutega liikmeteleskaalal 100(oma osa tehtud) … 0(ei teinud midagi)
Rühmatöö (2 inim.): 6b + 6a,c,d
Rühmatöö (3 inimest): 6b + 6a + 6c,d
Rühmatöö (4 inimest): 6b + 6a + 6c + 6d
Ülesanne Tegija Tähtaeg
6a Laas 4. mai
6b Kurg 5. mai
6c,d Liivoja 6. mai
Kompleks-
testimineKurg 9. mai
Esitamine Kurg 10. mai
Rühmatöö näidisplaan
Kodutöö nr 6
Praktikum 13Graafi läbimineLühim tee graafis
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.
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.
http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf : 6.2, 6.3
Praktikum 14TipuklassidGraafi minimaalne toesKruskali algoritm
A
H
D
B
EK
F
C
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.
F
D H
A
C
B E K
Pärast ühendamist (vt sinine viit joonisel):F
D H
A
C
B E K
F ja C on klasside esindajad
F on klassi esindaja
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.
P14-2 lahendus on tarvis esitada kodutöö nr 8 kättesaamiseks.
eemaldadaKaar(t1, t2) -- uuendatud moodulist Graaf.py (kaustas Praktikum14)
Praktikum 15
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”.