Transcript a[-1]
Algoritmid ja andmestruktuurid
Praktikum 2011/2012 kevadsemestril J. Liivi 2-203, R 8 -10
Jüri Kiho
Osavõtt praktikumidest tarvilik.
Kodutööd
antakse praktikumides ja 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).
2
Praktikum 1
1. Keskkonna
Amadeus_AlgPython
installeerimine 2. Fibonacci arvude leidmine 3. Lihtsa sorteerimisalgoritmi realiseerimine 4. Sorteerimise ajalise keerukuse katseline hindamine Kodutöö nr 1 3
Süsteemi
Amadeus_AlgPython
installeerimine praktikumiks ruumis L203* (
Windows
) aines
Algoritmid ja andmestruktuurid
1. Installeerida süsteem
Amadeus_AlgPython
1.1 Luua
Amadeus_AlgPython
i
kodukaust
nt
AlgPython
1.2 Laadida kodukausta programm
AlgPythonStarter.jar
aadressilt http://www.cs.ut.ee/~kiho/AlgPythonDownload.shtml
1.3 Startida, käivitades kodukaustas programmi
AlgPythonStarter.jar
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
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] 3. Salvestada muudetud projekt:
Fail > Eksportida
(
AlgPythonWorks.xml
) 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] 4 * Ruumist sõltuv on ainult samm 2.1
PROJEKT Pärast installeerimist (Windows) TÖÖKAUST 5
Süsteemi
Amadeus_AlgPython
(ning AA-abimaterjali) installeerimine ruumis L205* (
Linux
:
openSUSE
)
1. Installeerida süsteem
Amadeus_AlgPython
1.1 Luua
Amadeus_AlgPython
i
kodukaust
1.2 Laadida kodukausta programm nt
AlgPython205
AlgPythonStarter.jar
aadressilt http://www.cs.ut.ee/~kiho/AlgPythonDownload.shtml
1.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] 3. Salvestada muudetud projekt:
Fail > Eksportida
(
AlgPythonWorks.xml
) 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] 6 * Ruumist sõltuv on ainult samm 2.1
Pärast installeerimist (Linux) PROJEKT KODUKAUST
2. Fibonacci arvude leidmine
Vt ka [Kiho 2003, lk 89] TÜ Moodle / ► MTAT.03.133
/ ► Kursuse materjalid / ► Arvutipraktikum / ► prakt_1_2_aasta2012.pdf
/ ►
Ülesanne 1.
[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
8
3. Lihtsa sorteerimisalgoritmi realiseerimine
Näiteks mullimeetod. Kirjutada funktsioon
mullSort
ja testida.
4. Sorteerimise ajalise keerukuse katseline hindamine
• 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
. 9
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
.
10
Praktikum 2
I. Algoritmi ajaline keerukus II. Kombinatoorika
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 11
Eesnimi Perekonnanimi
Test 1
1. Tunnen programmeerimiskeelt
Python
(jah / ei) Eriala Algoritmid ja andmestruktuurid 2011/2012 kevadsemester 2. Mis on algoritm?
Täpne eeskiri, kuidas ülesannet lahendada lihtsamate operatsioonide täitmise teel.
3. Algoritmi ajaline keerukus on funktsioon, mis …
Algoritmi ajaline keerukus
on funktsioon
f
, mis lahendatava ülesande algandmete mahule
n
seab vastavusse programmi (keskmise) tööaja
f
(
n
).
algoritmi operatsioonide arvu
Edetabel:
1. JL ÜR 2. TI MO RV
TI := 1 boonuspunkt (Praktikum 1 + Test 1) 12
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
13
3. Järjendi “unifitseerimise” ülesanne
3.1 Realiseerida Testis 2 toodud algoritm funktsioonina.
3.2* Kirjutada Testis 2 kirjeldatud jadaülesande lahendamise rekursiivne funktsioon.
Ü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.3 Kirjutada ja testida ülesannet 3A lahendav funktsioon. 1.
Boonuse võimalus
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.
14
4. Kombinatoorika: permutatsioonid, kombinatsioonid, alamhulgad
Generaatori (generaator funktsiooni) mõiste.
Moodle … juri\Praktikum2\ylesanded2.pdf
Ülesanne 1 (a + b + c)
15
Kodutöö nr 2
Moodle … juri\Praktikum2\ylesanded2.pdf
Ülesanne 2 (a | b | c | d | e)
Tähtaeg: 1. märts
.
Soovitus: silumisel kasutada algul väiksemamahulisi näiteandmeid. Näiteks ülesande 2e puhul võiks alustada sobivustabeliga Mari Mari Jüri Ants Rein 0.1
0.5
0.8
Jüri 0.1
Ants 0.5
0.6
0.6
0.4
0.3
Rein 0.8
0.4
0.3
16
Praktikum 3
Magasin ja järjekord
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 17
1. Test 2 vastused
Eesnimi Perekonnanimi Eriala Algoritmid ja andmestruktuurid 2011/2012 kevadsemester
Test 2
Esitada Pythoni funktsioonina
n
-nda Fibonacci arvu leidmise rekursiivne algoritm.
def Fib(n): if n <= 1 : return n return Fib(n-1) + Fib(n-2) Antud
: järjend
a
pikkusega
n.
Näiteks:
a = 12 15 16 12 11 15 15 18 13 Tulemus
: 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 1
2. 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
c n
c n
c O
(
n
) (
n
)
O
(
n
(
n
1 )) Edetabel:
1. TI 2. JL
18
2. Kiireima unifitseerimis algoritmi pakkumise võistluse tulemused Ülesanne 3A Antud
: järjend
a.
Tulemus
: tagastatakse järjend, mis on saadud järjendist eemaldamise teel (unikaalsete elementide järjestus säilitatud). Näiteks:
a a
duplikaatväärtuste : 12 15 16 12 11 15 12 15 18 13. Tulemus: 12 16 11 15 18 13
Jõumeetod
(II koht, 1 bp) Antud järjend: a = [ □ □ □ □ □ □ ■ ? ==
□
□ □ □ □] Lisada, kui
O
(
n
) Tulemusjärjend: b = [ □ □ □ □ □ ] Kogukeerukus:
O
(
n
) b.count(a[i])> 0 vs a[i] in b
Kiire meetod
(I koht, 3 bp) Antud järjend: a = [ □ □ □ □ □ □ ■
□
□ □ □ □] Lisada, kui
O
(1) Pythonis: hulk paisktabelina, seal lisamine ja otsimine ~
O
(1) Tulemusjärjend: b = [ □ □ □ □ □ ] Abi
hulk
: c = { □ □ □ □ □ } Kogukeerukus: ~
O
(
n
) 19
20
Ülesanne 3A Antud
: järjend
a.
Tulemus
: tagastatakse järjend, mis on saadud järjendist eemaldamise teel (unikaalsete elementide järjestus säilitatud). Näiteks:
a a
duplikaatväärtuste : 12 15 16 12 11 15 12 15 18 13. Tulemus: 12 16 11 15 18 13 Algoritm (
JK_unif
) 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] ) b = [(4,11), (0,12), (3, 12), (6,12), (9,13), (1,15), (5,15), (7,15), (2,16 ), (8,18)]
O
(
n
log
n
) 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] ) c = [ (0,12), (1,15), (2,16 ), (4,11), (8,18), (9,13) ]
O
(
n
log
n
) Tulemuseks on järjend paaride teistest liikmetest: O (
n
) tulem = [ 12, 15, 16, 11, 18, 13 ] Kokku:
O
(
n
log
n
) 21
22
3. Magasini ja järjekorra realisatsioon Pythonis
Operatsioonid magasiniga Realisatsioon Pythonis magasin: järjend (listina)
a a
= [ □ □ □ □ □ □
□
□ □ □ □ ■ ] aken järjekorraga järjekord: järjend (listina)
a a
= [ ■ □ □ □ □ □
□
□ □ □ □ ■ ] Teha tühi magasin järjekord Panna väärtus
x
magasini järjekorda Võtta (mittetühjast) magasinist järjekorrast Väärtus magasini aknal järjekorra alguses järjekorra lõpus Kas on tühi?
magasin järjekord
a = [] a = [] a.append(x) a.append(x)
x =
a.pop()
x =
a.pop(0) a[-1] a[0] a[-1]
if
not a
if
not a
x
a
lõppu (magasini aknale)
x
järjekorra
a
lõppu
x
element magasini
a
aknalt ära
x
element järjekorra
a
algusest ära magasini
a
aknal oleva elemendi väärtus järjekorra
a
alguses oleva elemendi väärtus järjekorra
a
lõpus oleva elemendi väärtus
4. Praktikumitöö
Ülesanne 1
(järgmiselt slaidilt) või või • • • Vastavalt realisatsiooniskeemile eelmisel slaidil
*
Kasutades järjekorraoperatsioonideks eestikeelsete nimetustega funktsioone (vt
Moodle … Praktikum
3\
jrkOperatsioonid.algpy
)
**
Kasutades järjekorra klassi
Kodutöö nr 3
Ülesanded 2 ja 3
(järgmistelt slaididelt) NB! Preambul ja kommentaarid!
Tähtaeg: 15. märts
.
24
Ülesanne 1
Realiseerida ja kiirus testida sorteerimise nn järjekorrameetod. Idee näite varal: 8 esimene viimane 4 6 6 10
8
10 14 7 14 8 13 7 12 jaotada järjekordadesse (igas sorteeritult)
6
13
7
12 tagasi järjendisse (võttes esimestest vähima) 9 10 12 4 9
4
9 13 14 Millisest klassist on selle algoritmi keerukus? Millise järjendi korral töötab kõige kiiremini?
Ülesanne 2
Realiseerida ja kiirus-testida sorteerimise nn magasinmeetod. Idee näite varal: 8 4 aken 6 6 10 7 8 6
4
14 13 7 12 4 jaotada magasinidesse (igas sorteeritult) 10
7
14 13 12
9
tagasi järjendisse (võttes akendelt vähima) 8 9 10 12 13 9 14 25 Millisest klassist on selle algoritmi keerukus? Millise järjendi korral töötab kõige kiiremini?
Ülesanne 3
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.
26
Praktikum 4
Paiskfunktsioon
0. Test 4 1. Test 3 vastus 2. Kirje , võti ja võtmefunktsioon 3. Paiskfunktsiooni mõiste 4. Praktikumitöö 27
Test 3
1.
Test 3 vastus
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 Algoritmid ja andmestruktuurid 2011/2012 kevadsemester (
Josephus
)
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
13 13 15 13 15 11 13 15 11 18 13 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 28
2. Kirje, võti ja võtmefunktsioon
protokoll: Eraldaja \t 1 21 5 4 24 8 6 13
. . .
Aukland Anders Brink Jörgen Svaerd Oskar Norra Rootsi Rootsi Rezac Stanislav Tshehhi Fredriksson Mathias Rootsi Larsson Martin Sinnes Svein Tore Rootsi Norra Narusk Priit Voru 2:59:41 2:59:42 2:59:42 2:59:46 2:59:48 2:59:53 2:59:58 3:00:03 M35 protokoll[0] M35 protokoll[1] M21 protokoll[2] M35 protokoll[3] M35 protokoll[4] M21 protokoll[5] M21 protokoll[6] M21 protokoll[7] protokoll[3] = “4 Rezac Stanislav Tshehhi 2:59:46 M35” võtmefn = lambda x: x.split(‘\t’)[1] võtmefn(protokoll[3] ) = “Rezac Stanislav” 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” Kui kasutame
võtmefn
(x), siis kirje (x) võtmeks on perenimi
võtmefn
1, siis kirje (x) võtmeks on perenimi Kui kasutame
võtmefn
2, siis kirje (x) võtmeks on
eesnimi
29
3. Paiskfunktsiooni mõiste
. . .
. . .
võti ~ -2 31 +1 = -2147483647 hash(võti)
hash
on Pythoni paiskfunktsioon hash(võti’) ~2 31 -1 = 2147483647 võti 0 1
h
on paiskfunktsioon h(võti) h(võti’) h(võti”) kollisioon!
h
: {võtmed} {0,1, …, 3000} 3000 Näiteks:
h
(
x
) = hash(x) % 3001 30
4. Praktikumitöö
Koostada erinevate paiskfunktsioonide uurimise programm. Antud: kirjete fail, nt
protokoll1.txt
(
Moodle
…
Praktikum
4\
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): M = 17001 0 11326 1 2794 2 2189 3 460 - - - --
h h h h
väärtuste arv, mida ei esinenud väärtuste arv, mida esines 1 kord (st unikaalseid oli 2794) väärtuste arv, mida esines á 2 korda väärtuste arv, mida esines á 3 korda . . .
4 177 5 36 6 17 7 2 9 1 - --
h h
väärtuste arv, mida esines á 7 korda väärtuse arv, mida esines 9 korda Kirjete arv: 9565 Unikaalseid h vaartusi : 29.21% Boonusevõimalus: defineerida
h
, mille korral unikaalsete
h
h(x) = hash(x)%M korral. Sama fail (
protokoll1.txt
väärtuste % on suurem, kui ) ja sama
M
= 17001. 31
Praktikumitöö programmi üks võimalik skeem
32
Praktikum 5
Paisktabel
0. Test 5 1. Test 4 vastus 2.
Erinevaid paiskfunktsioone 3. Sorteerimine paisktabeli abil (kimbumeetod) 4. Kodutöö nr 4 33
1. Test 4 vastus
Eesnimi Perekonnanimi Algoritmid ja andmestruktuurid 2011/2012 kevadsemester
Test 4
1. Andmestruktuuri
magasin
mõiste Magasini korral on põhioperatsioonideks
lisada
(
lisatav
) ja
võtta
() omadusega
võtta
(
lisada
(
x
)) =
x
Vt ka J.Kiho. AA 2003, lk 24-26 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“] Edetabel: 1. UL 2. JL 34
2. Erinevaid paiskfunktsioone
35
3. Sorteerimine paisktabeli abil (kimbumeetod)
Kimbumeetodi võimalik skeem
h(x) on monotoonne funktsioon
36
Kodutöö nr 4
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.
Tähtaeg: 29. märts
.
37
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 Selle kohta infot ka:
Moodle … Praktikum6\Sebimine.ppt
SebiGraafi.jar.
6.2 Kirjutada funktsioon, mis muudab antud graafis kaarte orientatsiooni vastupidiseks.
38
graaf.txt
1) D[199;30] a --> 2 2) G[30;185]
SebiGraafi.jar
from Graaf import * import os os.system("java -jar SebiGraafi.jar graaf.txt") g = graafFailist(“graaf.txt”)
g
loodud objekt
g
(graaf sisekujul) print("Graafi tippude arv = ",
g
.n()) t =
g
.tippNr(1) # graafi g esimene tipp print("Esimese tipu aste on ",
g
.aste(t)) Kasutaja 39
Praktikum 7
Kahendpuud
0. Test 6 1.
Etüüdid kahendpuul (vt ka
AAbits
) 2. Kahendotsimispuu Kodutöö nr 5 40
1. Etüüdid kahendpuul
(vt ka
AAbits
) Kõik kasutavad funktsioone
vasakAlluv ja paremAllluv
klassist
Graaf
Nr Antud Tulemus Kasutab veel I-1 I-2 I-3 I-4 I-5 I-6 Kahendpuu ja selle tipp Kahendpuu Kahendpuu ja selle tipp Aritmeetilise avaldise kahendpuu ja selle tipp Kahendpuu ja selle tipp Kahendpuu ja selle tipp ning sellele tipule omistatav tasemenumber
n
Tagastatakse antud tipust algava (alam)kahendpuu kõrgus Tagastatakse
True
, kui üheski tipus alluvate kõrgus ei erine rohkem kui 1 võrra (st kahendpuu on tasakaalus), muidu
False
Väljastatud konsoolile antud tipust algava (alam)kahendpuu tippude märgendid lõppjärjestuses Väljastatud konsoolile antud tipust algav aritmeetiline avaldis (infiks kujul) Tagastatakse antud tipu järglaste (vahetute ja kaugemate) koguarv Antud tipust algava (alam)kahendpuu tippudele (tipuväljadele “
tase
”) omistatud tasemenumbrid:antud tipul “tase”=
n
, selle alluvatel
n
+1, … Väli
tipud
klassis
Graaf
F n eelmisest etüüdist F-n
märgend
klassist
Tipp
F-n
märgend
klassist
Tipp
F-n
aste
klassist
Graaf
F-n
seadaVäli
klassist
Tipp
+ Rek + + + + 41
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
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
Tähtaeg: 12. aprill
.
42
Praktikum 8
Puud
Etüüdid puul
Nr P-1 P-2 P-3 Antud Puu ja selle tipp Puu ja selle tipp Puu ja selle tipp Tulemus Tagastatakse antud tipust algava (alam)puu kõrgus Tagastatakse antud tipu järglaste (vahetute ja kaugemate) koguarv Väljastatud konsoolile antud tipust algava (alam)puu vasak suluesitus Kasutab F-n
naabertipud
klassist
Graaf
F-n
naabertipud
klassist
Graaf
F-n
aste
klassist F-n
märgend Graaf
klassist
Tipp
F-n
naabertipud
klassist
Graaf
Rek + + + 43