Upload
christian-zurlo
View
131
Download
7
Embed Size (px)
DESCRIPTION
Algoritmid ja andmestruktuurid. Praktikum 20 11 /201 2 kevadsemestril J. Liivi 2-20 3 , R 8 - 10 Jüri Kiho. Osavõtt praktikumidest tarvilik. Kodutööd antakse praktikumides ja kontrollitakse (lõplikult) samuti praktikumides. - PowerPoint PPT Presentation
Citation preview
Algoritmid ja andmestruktuurid
Praktikum 2011/2012 kevadsemestrilJ. Liivi 2-203, R 8 -10
Jüri Kiho
2
Osavõtt praktikumidest tarvilik.
Kodutööd antakse praktikumidesja kontrollitakse (lõplikult) samuti praktikumides.
Kodutööks on reeglina aega kaks nädalat. Kuid soovitatav on esitada kodutöö ühe nädala jooksul – siis on võimalik saada tagasisidet ning sellel vastavalt kodutööd veel viimistleda (hinnet tõsta).
Praktikumitööd tuleb teha reeglina kohapeal (J. Liivi 2-203).
Praktikumi alguses on väike test (~5 min).
Paarisprogrammeerimine lubatud (ja soovitatav).
Programmeerimiskeel: Python (vers. 3.1)
Programmeerimiskeskkond: Amadeus_AlgPython (väga soovitatav).
3
Praktikum 11. Keskkonna Amadeus_AlgPython installeerimine
2. Fibonacci arvude leidmine
3. Lihtsa sorteerimisalgoritmi realiseerimine
4. Sorteerimise ajalise keerukuse katseline hindamine
Kodutöö nr 1
4
Süsteemi Amadeus_AlgPython installeerimine praktikumiks ruumis L203* (Windows)aines Algoritmid ja andmestruktuurid
* Ruumist sõltuv on ainult samm 2.1
1. Installeerida süsteem Amadeus_AlgPython1.1 Luua Amadeus_AlgPythoni kodukaust nt AlgPython1.2 Laadida kodukausta programm AlgPythonStarter.jar aadressilt http://www.cs.ut.ee/~kiho/AlgPythonDownload.shtml1.3 Startida, käivitades kodukaustas programmi AlgPythonStarter.jar
2. Korrigeerida Python-interpretaatori tee 2.1 Projektis (vasakus aknas) teha parandus (L203-spetsiifiline): Python: python3.0 Python: C:\Python31\python [Vt järgmine slaid]
4. Installeerida praktikumi abimaterjal AAbits 4.1 Projektis (vasakus aknas, viimases sektsioonis) lisada programmide nimed: AAbits.algpy Graaf.algpy 4.2 Olemasolevasse kausta AlgPython\workspace pakkida lahti AAbits.zip aadressilt http://www.cs.ut.ee/~kiho/ads/spring12 [Vt järgmine
slaid]
3. Salvestada muudetud projekt: Fail > Eksportida (AlgPythonWorks.xml)
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
5
Pärast installeerimist (Windows) PROJEKT TÖÖKAUST
Süsteemi Amadeus_AlgPython (ning AA-abimaterjali) installeerimine ruumis L205* (Linux: openSUSE)
* Ruumist sõltuv on ainult samm 2.1
1. Installeerida süsteem Amadeus_AlgPython1.1 Luua Amadeus_AlgPythoni kodukaust nt AlgPython2051.2 Laadida kodukausta programm AlgPythonStarter.jar aadressilt http://www.cs.ut.ee/~kiho/AlgPythonDownload.shtml1.3 Startida, käivitades kodukaustas käsurealt AlgPython205> java -jar AlgPythonStarter.jar
2. Korrigeerida Python-interpretaatori tee 2.1 Projektis (vasakus aknas) teha parandus (L205-spetsiifiline): Python: python3.0 Python: python3.1 [Vt järgmine slaid]
4. Installeerida praktikumi abimaterjal AAbits 4.1 Projektis (vasakus aknas, viimases sektsioonis) lisada programmide nimed: AAbits.algpy Graaf.algpy 4.2 Pakkida lahti Aabits.zip aadressilt http://www.cs.ut.ee/~kiho/ads/spring12 järgmiselt: failid *.*py (olemasolevasse) kausta AlgPython205/workspace failid Sebi*.jar kodukausta AlgPython205 [Vt järgmine slaid]
3. Salvestada muudetud projekt: Fail > Eksportida (AlgPythonWorks.xml)
7
Pärast installeerimist (Linux)
PROJEKT
TÖÖKAUST
KODUKAUST
8
TÜ Moodle / ► MTAT.03.133 / ► Kursuse materjalid / ► Arvutipraktikum / ► prakt_1_2_aasta2012.pdf / ► Ülesanne 1.
2. Fibonacci arvude leidmine Vt ka [Kiho 2003, lk 89]
[Kiho 2003] J.Kiho. Algoritmid ja andmestruktuurid. TÜ, 2003, 147 lk.Raamat saadaval ATI kantseleis.e-koopiad: http://math.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf http://math.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.ps
9
3. Lihtsa sorteerimisalgoritmi realiseerimine
4. Sorteerimise ajalise keerukuse katseline hindamine
Näiteks mullimeetod. Kirjutada funktsioon mullSort ja testida.
• Algatada uus programm, kopeerides selle preambuli programmist Aabits.algpy.• Kopeerida uude programmi stend programmist Aabits.algpy, st skeem nimega “funktsioonide tööajad: mõõtmine ja graafikud”. • Lisada uuritavate meetodite sektsiooni funktsioon mullSort ja meetodite nimede loetelus asendada (näiteks) nimi valikSort nimega mullSort.
10
Kodutöö nr 1
TÜ Moodle / ► MTAT.03.133 / ► Kursuse materjalid / ► Arvutipraktikum / ► prakt_1_2_aasta2012.pdf Ülesanne 2 (a+b+c).
Tähtaeg: 1. märts.
11
Praktikum 2
0. Test 2
1. Test 1 vastused
2. Meelespea AAbits värskendamine. Näidisprogramm EestiLipp
3. Järjendi “unifitseerimise” ülesanne
4. Kombinatoorika: permutatsioonid, kombinatsioonid, alamhulgad
Kodutöö nr 2
I. Algoritmi ajaline keerukusII. Kombinatoorika
12
Algoritmid ja andmestruktuurid2011/2012 kevadsemesterTest 1
Eesnimi Perekonnanimi Eriala
3. Algoritmi ajaline keerukus on funktsioon, mis …
2. Mis on algoritm?
1. Tunnen programmeerimiskeelt Python (jah / ei)
Algoritmi ajaline keerukus on funktsioon f, mis lahendatava ülesande algandmete mahule n seab vastavusse programmi (keskmise) tööaja f(n).
algoritmi operatsioonide arvu
Täpne eeskiri, kuidas ülesannet lahendada lihtsamate operatsioonide täitmise teel.
Edetabel: 1. JL ÜR 2. TI MO RV
TI := 1 boonuspunkt (Praktikum 1 + Test 1)
13
2. Meelespea AAbits värskendamine. Näidisprogramm EestiLipp
Asendada fail …\AlgPython\workspace\AAbits.algpy
Moodle … AAbits.algpy
Lisada fail …\AlgPython\workspace\________
Moodle … EestiLipp.algpy
Projekti lisada failinimi EestiLipp.algpy
14
3. Järjendi “unifitseerimise” ülesanne
Ülesanne 3A Antud: järjend a. Tulemus: tagastatakse järjend, mis on saadud järjendist a duplikaatväärtuste eemaldamise teel (unikaalsete elementide järjestus säilitatud). Näiteks: a: 12 15 16 12 11 15 12 15 18 13. Tulemus: 12 16 11 15 18 13
3.1 Realiseerida Testis 2 toodud algoritm funktsioonina.
3.2* Kirjutada Testis 2 kirjeldatud jadaülesande lahendamise rekursiivne funktsioon.
Boonuse võimalus 1. Osaleda kiireima unifitseerimisalgoritmi pakkumise võistluses; selleks saata ülesande 3A funktsioon *.algpy aadressile [email protected] hiljemalt 19. veebruaril.2. Saadetud funktsioonidest kiireima autor saab 1-3 boonuspunkti. Kiirusi võrreldakse eeskätt graafikute alusel, mille kuvab vastav programm abimaterjalist AAbits.
3.3 Kirjutada ja testida ülesannet 3A lahendav funktsioon.
15
4. Kombinatoorika: permutatsioonid, kombinatsioonid, alamhulgad
Moodle … juri\Praktikum2\ylesanded2.pdf Ülesanne 1 (a + b + c)
Generaatori (generaator-funktsiooni) mõiste.
16
Kodutöö nr 2
Tähtaeg: 1. märts.
Moodle … juri\Praktikum2\ylesanded2.pdf Ülesanne 2 (a | b | c | d | e)
Soovitus: silumisel kasutada algul väiksemamahulisi näiteandmeid. Näiteks ülesande 2e puhul võiks alustada sobivustabeliga
Mari Jüri Ants Rein
Mari 0.1 0.5 0.8
Jüri 0.1 0.6 0.4
Ants 0.5 0.6 0.3
Rein 0.8 0.4 0.3
17
Praktikum 3
0. Test 3
1. Test 2 vastused
2. Kiireima unifitseerimisalgoritmi pakkumise võistluse tulemused
3. Magasini ja järjekorra realisatsioon Pythonis
4. Praktikumitöö
Kodutöö nr 3
Magasin ja järjekord
18
Algoritmid ja andmestruktuurid2011/2012 kevadsemesterTest 2
Eesnimi Perekonnanimi Eriala
Esitada Pythoni funktsioonina n-nda Fibonacci arvu leidmise rekursiivne algoritm.
Antud: järjend a pikkusega n. Näiteks: a = 12 15 16 12 11 15 15 18 13Tulemus: järjendi a unikaalsetest elementidest koostatud järjend (elementide järjestus säilitatud). 1. Luua abijärjend b, mille i-ndaks elemendiks on arv, mitu korda järjendi a i-nda elemendi väärtus
esineb järjendis a. Näiteks: a = 12 15 16 12 11 15 15 18 13 b = 2 3 1 2 1 3 3 1 12. Luua tulemusjärjend c, kuhu kanda a need elemendid, millele vastav b element on 1. Näiteks: a = 12 15 16 12 11 15 15 18 13 b = 2 3 1 2 1 3 3 1 1 c = 16 11 18 13
Ülaltoodud algoritmi ajaline keerukus on ja isegi ..
def Fib(n):
if n <= 1 : return n
return Fib(n-1) + Fib(n-2)
)( 2nO012
2 cncnc )( 2n
Edetabel: 1. TI 2. JL
1. Test 2 vastused
))1(( nnOVastus pole just vale, kuid ei sobi. Miks?
19
Ülesanne 3A Antud: järjend a. Tulemus: tagastatakse järjend, mis on saadud järjendist a duplikaatväärtuste eemaldamise teel (unikaalsete elementide järjestus säilitatud). Näiteks: a: 12 15 16 12 11 15 12 15 18 13. Tulemus: 12 16 11 15 18 13
2. Kiireima unifitseerimis-algoritmi pakkumise võistluse tulemused
a = [□ □ □ □ □ □ ■ □ □ □ □ □]
b = [□ □ □ □ □ ]
Lisada, kui ■ b on O(n)
a = [□ □ □ □ □ □ ■ □ □ □ □ □]
b = [□ □ □ □ □ ]
? ==
c = {□ □ □ □ □ }
Lisada, kui ■ c on ~O(1)
Antud järjend:
Tulemusjärjend:
Antud järjend:
Tulemusjärjend:
Abihulk:
Kogukeerukus: O(n ) 2
Kogukeerukus: ~O(n)
Pythonis: hulk paisktabelina,
seal lisamine ja otsimine ~O(1)
Kiire meetod (I koht, 3 bp)
Jõumeetod (II koht, 1 bp)
b.count(a[i])> 0vsa[i] in b
20
21
Ülesanne 3A Antud: järjend a. Tulemus: tagastatakse järjend, mis on saadud järjendist a duplikaatväärtuste eemaldamise teel (unikaalsete elementide järjestus säilitatud). Näiteks: a: 12 15 16 12 11 15 12 15 18 13. Tulemus: 12 16 11 15 18 13
Luua paaride järjend enumerate( ) O(n) b = [ (0,12), (1,15), (2,16 ), (3, 12), (4,11), (5,15), (6,12), (7,15), (8,18), (9,13) ]
Sorteerida paari teise liikme järgi sort(key = lambda x: x[1] ) O(n log n) b = [(4,11), (0,12), (3, 12), (6,12), (9,13), (1,15), (5,15), (7,15), (2,16 ), (8,18)]
Jätta ainult need, mille ees ei ole samasuguse teise liikmega paar O(n) c = [(4,11), (0,12), (9,13), (1,15), (2,16 ), (8,18)]
Sorteerida paari esimese liikme järgi sort(key = lambda x: x[0] ) O(n log n) c = [ (0,12), (1,15), (2,16 ), (4,11), (8,18), (9,13) ]
Tulemuseks on järjend paaride teistest liikmetest: O(n) tulem = [ 12, 15, 16, 11, 18, 13 ]
Kokku: O(n log n)
Algoritm (JK_unif )
22
Operatsioonid magasiniga
järjekorraga
Realisatsioon Pythonis magasin: järjend (listina) a
järjekord: järjend (listina) a
a = [ □ □ □ □ □ □ □ □ □ □ □ ■ ]
a = [ ■ □ □ □ □ □ □ □ □ □ □ ■ ]
Teha tühi magasin järjekord
a = []a = []
Panna väärtus x magasini järjekorda
a.append(x)a.append(x)
x a lõppu (magasini aknale)x järjekorra a lõppu
Võtta (mittetühjast) magasinist järjekorrast
x = a.pop()x = a.pop(0)
x element magasini a aknalt ärax element järjekorra a algusest ära
Väärtus magasini aknal järjekorra alguses järjekorra lõpus
a[-1]a[0]a[-1]
magasini a aknal oleva elemendi väärtusjärjekorra a alguses oleva elemendi väärtusjärjekorra a lõpus oleva elemendi väärtus
Kas on tühi? magasin järjekord
if not aif not a
aken
3. Magasini ja järjekorra realisatsioon Pythonis
24
Kodutöö nr 3
Tähtaeg: 15. märts.
Ülesanded 2 ja 3 (järgmistelt slaididelt)
NB! Preambul ja kommentaarid!
4. PraktikumitööÜlesanne 1 (järgmiselt slaidilt)
• Vastavalt realisatsiooniskeemile eelmisel slaidil • *Kasutades järjekorraoperatsioonideks eestikeelsete nimetustega funktsioone (vt Moodle … Praktikum3\jrkOperatsioonid.algpy) • **Kasutades järjekorra klassi
või
või
25
Realiseerida ja kiirus-testida sorteerimise nn magasinmeetod. Idee näite varal: 8 6101413 712 4 9
jaotada magasinidesse(igas sorteeritult)
8 6 4
10 7
14 13 12 9
tagasi järjendisse(võttes akendelt vähima)
4 6 7 8 910121314
Millisest klassist on selle algoritmi keerukus? Millise järjendi korral töötab kõige kiiremini?
Realiseerida ja kiirus-testida sorteerimise nn järjekorrameetod. Idee näite varal: 8 6101413 712 4 9
jaotada järjekordadesse(igas sorteeritult)
8 10 14
6 13
7 12
tagasi järjendisse(võttes esimestest vähima)
4 6 7 8 910121314
esimene viimane
Millisest klassist on selle algoritmi keerukus? Millise järjendi korral töötab kõige kiiremini?
4 9
aken
Ülesanne 1
Ülesanne 2
26
Juveelipoe omanik korraldab aegajalt reklaamiürituse, kus ühele külastajale loositakse võimalus tasuta omandada üks ehe vaateaknal olevast ehetereast. Selline premeerimine toimub vahetult enne poe sulgemist, mil ehted vaateaknalt ära viiakse. Loosiga väljavalitud isik peab ütlema ühe arvu k (0 < k < ehete arv reas). Seejärel hakatakse ehteid aknalt eemaldama: vasakult paremale liikudes eemaldatakse iga k-s ese, rea lõppu jõudes jätkub loendamine rea algusest. Isik saab endale ehte, mis viimasena jääb vaateaknale.Selleks et loosiõnne naeratamise puhuks olla valmis ütlema sellist arvu k, et saada võimalikult hinnaline ehe, tuleb koostada (oma nutitelefoni laadimiseks :) programm, mis, saades ehete hindade järjendi, väljastab soovitud k.
Vihje: nn Josephuse probleemi saab hõlpsasti lahendada, kujutades rea järjekorrana, millest igal sammul: esimesed k-1 viiakse järjekorra algusest järjekorra lõppu, seejärel järjekorras esimeseks jäänu lihtsalt eemaldatakse.
Ülesanne 3
27
Praktikum 4
0. Test 4
1. Test 3 vastus
2. Kirje, võti ja võtmefunktsioon
3. Paiskfunktsiooni mõiste
4. Praktikumitöö
Paiskfunktsioon
28
Algoritmid ja andmestruktuurid2011/2012 kevadsemesterTest 3
Andmestruktuur järjekord (J ) on iseloomustatud järgmiste operatsioonidega (funktsioonidega):
• teha_tühi_järjekord() --- luuakse ja tagastatakse tühi järjekord
• panna_viimaseks(J, x) --- järjekorda J lisatakse (viimaseks) element väärtusega x
• võtta_esimene(J) --- järjekorrast J eemaldatakse (esimene) element, tagastatakse selle väärtus
• on_tühi(J) --- tagastatakse Tõene, kui J on tühi, Väär vastasel korral
a := teha_tühi_järjekord() panna_viimaseks(a, 13)panna_viimaseks(a, 15)panna_viimaseks(a, 11)panna_viimaseks(a, 18)panna_viimaseks(a, 11) --- tsükkel panna_viimaseks(a, võtta_esimene(a)) panna_viimaseks(a, võtta_esimene(a)) x = võtta_esimene(a) on_tühi(a) ? --- katkestada tsükkel --- siinkohal: x = 18
(Josephus)
?
1313 1513 15 1113 15 11 1813 15 11 18 11 11 18 11 13 15 18 11 13 15 13 15 18 11 15 18 11 11 15 18 15 18 15 18
1. Test 3 vastus
29
2. Kirje, võti ja võtmefunktsioon
1 Aukland Anders Norra 2:59:41 M35 protokoll[0] 21 Brink Jörgen Rootsi 2:59:42 M35 protokoll[1] 5 Svaerd Oskar Rootsi 2:59:42 M21 protokoll[2] 4 Rezac Stanislav Tshehhi 2:59:46 M35 protokoll[3] 24 Fredriksson Mathias Rootsi 2:59:48 M35 protokoll[4] 8 Larsson Martin Rootsi 2:59:53 M21 protokoll[5] 6 Sinnes Svein Tore Norra 2:59:58 M21 protokoll[6] 13 Narusk Priit Voru 3:00:03 M21 protokoll[7] . . .
võtmefn = lambda x: x.split(‘\t’)[1] võtmefn(protokoll[3] ) = “Rezac Stanislav”
“4 Rezac Stanislav Tshehhi 2:59:46 M35”protokoll[3] =
võtmefn1 = lambda x: x.split(‘\t’)[1].split()[0] võtmefn1(protokoll[3] ) = “Rezac”
võtmefn2 = lambda x: x.split(‘\t’)[1].split()[1]võtmefn2(protokoll[3] ) = “Stanislav”
protokoll:
Kui kasutame võtmefn(x), siis kirje (x) võtmeks on perenimi <tühik> eesnimiKui kasutame võtmefn1, siis kirje (x) võtmeks on perenimiKui kasutame võtmefn2, siis kirje (x) võtmeks on eesnimi
Eraldaja \t
30
3. Paiskfunktsiooni mõiste
kirje
võti
võti
hash(võti)
~ -231 +1 = -2147483647
~231 -1 = 2147483647ki
rje h(võti)
hash(võti’)
h(võti’)
01
3000
Näiteks: h(x) = hash(x) % 3001
kollisioon!
h(võti”)
hash on Pythoni paiskfunktsioon
h: {võtmed} {0,1, …, 3000}
. . .
. . .
h on paiskfunktsioon
31
Koostada erinevate paiskfunktsioonide uurimise programm.
Antud: kirjete fail, nt protokoll1.txt (Moodle … Praktikum4\protokoll1.txt \workspace)Programmis olgu • seatud muutuja M, mis määrab paiskfunktsiooni väärtuste piirkonna {0, 1, …, M-1}• defineeritud kirjest võtme eraldamise funktsioon võtmefn(kirje) = lambda x: …• defineeritud uuritav paiskfunktsioon def h(võti):… h: võtmete hulk {0, 1, …, M-1}
Tulemus (näite varal):
4. Praktikumitöö
Boonusevõimalus: defineerida h, mille korral unikaalsete h väärtuste % on suurem, kuih(x) = hash(x)%M korral. Sama fail (protokoll1.txt) ja sama M = 17001.
M = 170010 11326 -- h väärtuste arv, mida ei esinenud1 2794 -- h väärtuste arv, mida esines 1 kord (st unikaalseid oli 2794)2 2189 -- h väärtuste arv, mida esines á 2 korda3 460 -- h väärtuste arv, mida esines á 3 korda4 177 . . .5 366 177 2 -- h väärtuste arv, mida esines á 7 korda9 1 -- h väärtuse arv, mida esines 9 kordaKirjete arv: 9565Unikaalseid h vaartusi : 29.21%
32
Praktikumitöö programmi üks võimalik skeem
33
Praktikum 5
0. Test 5
1. Test 4 vastus
2. Erinevaid paiskfunktsioone
3. Sorteerimine paisktabeli abil (kimbumeetod)
4. Kodutöö nr 4
Paisktabel
34
Algoritmid ja andmestruktuurid2011/2012 kevadsemesterTest 4
Eesnimi Perekonnanimi
1. Andmestruktuuri magasin mõiste
2. Kas andmestruktuuri järjekord iseloomustab inglisekeelne akronüüm LIFO või FIFO? FIFO (First In First Out)
3. Pythoni avaldise “11101011“.split(‘0‘) väärtuseks on: [“111”, “1”, “11“]
Magasini korral on põhioperatsioonideks lisada(lisatav) ja võtta() omadusega võtta(lisada(x)) = xVt ka J.Kiho. AA 2003, lk 24-26
Edetabel:1. UL2. JL
1. Test 4 vastus
35
2. Erinevaid paiskfunktsioone
36
Kimbumeetodi võimalik skeem
h(x) on monotoonne funktsioon
3. Sorteerimine paisktabeli abil (kimbumeetod)
37
Kodutöö nr 4
Tähtaeg: 29. märts.
4.1. Koostada paiskfunktsioonide uurimise programm (vt Praktikum 4, p 4). 4.2. Realiseerida täisarvude sorteerimise kimbumeetod.
Esitada mõlemad, nii 4.1 kui ka 4.2.
38
Praktikum 6 Graafitöötluse algeid
6.1 Töötada läbi programmi Aabits.algpy sektsioon graafid.
Seonduvad klassid on kirjeldatud moodulis Graaf.algpy.
Graafi kuvamiseks/käitlemiseks ekraanil: Java käivitatav moodul SebiGraafi.jar. Selle kohta infot ka: Moodle … Praktikum6\Sebimine.ppt
6.2 Kirjutada funktsioon, mis muudab antud graafis kaarte orientatsiooni vastupidiseks.
39
SebiGraafi.jar1) D[199;30] a --> 22) G[30;185]
graaf.txt
from Graaf import *import osos.system("java -jar SebiGraafi.jar graaf.txt")g = graafFailist(“graaf.txt”)
print("Graafi tippude arv = ", g.n())t = g.tippNr(1) # graafi g esimene tippprint("Esimese tipu aste on ", g.aste(t))
g loodud objekt g (graaf sisekujul)
Kasutaja
40
Praktikum 7 Kahendpuud
0. Test 6
1. Etüüdid kahendpuul (vt ka AAbits)
2. Kahendotsimispuu
Kodutöö nr 5
41
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 lõppjä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 TippF-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 +
1. Etüüdid kahendpuul (vt ka AAbits) Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf
42
2. Kahendotsimispuu
Ülesanne 2.1. Koostada funktsioon, mis antud (täisarvu)järjendist moodustab võimalikult madala kahendotsimispuu, mille tippudes on arvud antud järjendist.
Kodutöö nr 5
Tähtaeg: 12. aprill.
Kasutades J.Kiho koostatud moodulit Graaf :
5.1. Kolm etüüdi kahendpuul (eelmiselt slaidilt, omal valikul). 5.2. Ülesanne 2.1.
5.3. Realiseerida funktsioonidena kahendotsimispuu operatsioonid leida, lisada, eemaldada. Antud on kahendpuu ja väärtus (arv). Soovitus: võib eeldada, et ei eemaldata juurtippu.
Esitada 5.1 ja 5.2 ja 5.3
43
Praktikum 8 Puud
Nr Antud Tulemus Kasutab Rek
P-1 Puu ja selle tipp Tagastatakse antud tipust algava (alam)puu kõrgus
F-n naabertipud klassist Graaf +
P-2 Puu ja selle tipp Tagastatakse antud tipu järglaste (vahetute ja kaugemate) koguarv
F-n naabertipud klassist Graaf +
P-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
+
Etüüdid puul