Transcript Praktikum 1

Algoritmid ja andmestruktuurid
Praktikum 2010/2011 kevadsemestril
J. Liivi 2-203, N 12-14
Jüri Kiho
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).
Praktikum 1
• Keskkonna Amadeus_AlgPython installeerimine
• Sorteerimise ajalise keerukuse katseline hindamine
• Alamhulkade läbivaatamine
• Kodune ülesanne nr 1
Praktikum 1
3
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
Kaustas AlgPython käivitada AlgPythonStarter.jar
Praktikum 1
4
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
5
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
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
7
Lisada oma projekti programmid
graafikud.algpy
ajavott.algpy
graafikudTabelist.algpy
alamhulgad.algpy
- valemina antud funktsioonid
- sorteerimismeetodi ajakulu
- tabelina antud funktsioonid
- kõik alamhulkad või elementide kombinatsioonid
Katsetamiseks: avada (3xhiire-vasak programmi nimel)
ja salvestada (Fail+Salvestada)
Praktikum 1
8
Praktikumitöö 1-1
Sorteerimise ajalise keerukuse katseline hindamine:
Ühele joonisele kujutada tööaja graafikud sorteerimismeetoditele
pisteSort,
kiirSort
ja (pythoni) sorted
Praktikum 1
9
Kodutöö nr 1
Tähtaeg: 24.02.2011
Hulga alamhulkade läbivaatamine, elementide kombinatsioonid
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
10
Praktikum 2,3
“MinuMakrod”
Rekursioon
Ekraanigraafika
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).
Praktikum 2,3
11
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
12
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
13
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
14
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
15
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
16
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
http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
http://effbot.org/tkinterbook/
Praktikum 2,3
-- tahvel (canvas)
-- kuularid
-- kogu raamat
17
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
18
Praktikum 4
Praktikumitöö 4 - 1
Magasin
Järjekord
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, nagu
len(a), a.append(x), a.pop( ), a.insert(i, x).
Vt ka http://docs.python.org/tutorial/datastructures.html
Praktikum 4
19
Kodutöö nr 2 – antakse praktikumis individuaalselt.
NB! Koostatavas programmis tuleb kasutada praktikumitööna
realiseeritud magasini- või järjekorraoperatsioone.
Praktikum 4
20
Praktikum 5
Klass
Graaf
Kahendpuu
Laadida töökausta workspace vajalikud vahendid:
1.
2.
3.
Java käivitatav moodul SebiGraafi.jar
Java käivitatav moodul SebiPuud.jar (vajalik edaspidi)
Java käivitatav moodul SebiKPuud.jar
4.
5.
Pythoni moodul
Graaf.py,
selle selgem ülevaade Graaf.algpy
6.
Praktikumitöö hakatus P5kahendpuu.algpy
Praktikum 5
21
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
22
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
23
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
24
SebiKPuud
P5kahendpuu
kpuu.txt
1) A a3
2) B …
3) C …
kpuu1.txt
1) …
2) …
g = graafFailist(“kpuu.txt”) --- antud
Klassi Graaf isend g
…
Graaf
…
tipud: [<A>, <B>, <C>…]
töödelda g kaared: [(<A>, <C>, a), …]
…
…
…
…
g.faili(“kpuu1.txt”) --- tulemusgraaf
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
26
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
27
Kahendpuu
Puu
Graaf
Praktikum 6
I. Etüüdid kahendpuul
Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf
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 (infikskujul)
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
+
II. Etüüdid puul
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 Tipp
F-n naabertipud klassist Graaf
+
III. Etüüdid graafil
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 Graaf
F-n otsidaKaar klassis Graaf
F-n lisadaKaar klassis Graaf
Väli algusTipp klassis Kaar
Väli lppTipp klassis Kaar
Vä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 Tipp
F-n väli klassist Tipp
+
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.
Praktikum 7
Kordused jadas
Kirje võti
Python: 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) perenime
c) eesnime
Tekstifaili sisestamiseks: funktsioon txtin (makro Alt+txtin).
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
32
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
33
Väljund
------------- TEST 4 (kirjejada) -----------
4. Kirjefaili protokoll.txt uurimine
Kirje
1 Aukland Anders Norra 2:59:41 M35
võtmeväli
Vanuserühm
Lõpuaeg
Kust
Kes
Rinnanumber
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
Väljad, eraldaja \t
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:
…
Praktikum 8
Räsifunktsioon hash()
Paiskfunktsioon
Paisktabel
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.
Praktikum 9
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
36
Praktikum 10
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.
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
Praktikum 12
Teksti pakkimine
Huffmani koodipuu
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)
------------- 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
------------- 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]
------------- 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"
Kodutöö nr 6
Rühmatöö tiimid:
juht (ül 6b)
liikmed
Rühmatöö (2 inim.): 6b + 6a,c,d
Rühmatöö (3 inimest): 6b + 6a + 6c,d
Kurg
Laas
Liivoja
Rankla
Kirsimäe
Merisalu
Rebane
Kaasik
Kruusmaa
Timberg
Tiidla M
Tiidla P
Loskit
Trees
Moisto
Valli
Rühmatöö (4 inimest): 6b + 6a + 6c + 6d
Rühmatöö näidisplaan
Ülesanne
Tegija
Tähtaeg
6a
Laas
4. mai
6b
Kurg
5. mai
6c,d
Liivoja
6. mai
Komplekstestimine
Kurg
9. mai
Esitamine
Kurg
10. mai
Projekti tähtaeg 10. mai
Esitada koos hindeettepanekutega liikmetele
skaalal 100(oma osa tehtud) … 0(ei teinud midagi)
Praktikum 13
Graafi läbimine
Lühim tee graafis
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
Tipuklassid
Graafi minimaalne toes
Kruskali algoritm
Praktikum 14
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
H
D
B
E
A
F
K
C
F ja C on klasside esindajad
A
Pärast ühendamist (vt sinine viit joonisel):
F
D
A
H
E
C
B
F on klassi esindaja
E
B
K
K
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 ~ :
eemaldadaKaar(t1, t2) -- uuendatud moodulist Graaf.py
• Graaf g failist g.txt
(kaustas Praktikum14)
• 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.
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”.