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 eesnimi Kui kasutame

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