43
Algoritmid ja andmestruktuurid Praktikum 2011/2012 kevadsemestril J. Liivi 2-203, R 8 -10 Jüri Kiho

Algoritmid ja andmestruktuurid

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

Page 1: Algoritmid ja andmestruktuurid

Algoritmid ja andmestruktuurid

Praktikum 2011/2012 kevadsemestrilJ. Liivi 2-203, R 8 -10

Jüri Kiho

Page 2: Algoritmid ja andmestruktuurid

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).

Page 3: Algoritmid ja andmestruktuurid

3

Praktikum 11. Keskkonna Amadeus_AlgPython installeerimine

2. Fibonacci arvude leidmine

3. Lihtsa sorteerimisalgoritmi realiseerimine

4. Sorteerimise ajalise keerukuse katseline hindamine

Kodutöö nr 1

Page 4: Algoritmid ja andmestruktuurid

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

Page 5: Algoritmid ja andmestruktuurid

5

Pärast installeerimist (Windows) PROJEKT TÖÖKAUST

Page 6: Algoritmid ja andmestruktuurid

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)

Page 7: Algoritmid ja andmestruktuurid

7

Pärast installeerimist (Linux)

PROJEKT

TÖÖKAUST

KODUKAUST

Page 8: Algoritmid ja andmestruktuurid

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

Page 9: Algoritmid ja andmestruktuurid

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.

Page 10: Algoritmid ja andmestruktuurid

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.

Page 11: Algoritmid ja andmestruktuurid

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

Page 12: Algoritmid ja andmestruktuurid

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)

Page 13: Algoritmid ja andmestruktuurid

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

Page 14: Algoritmid ja andmestruktuurid

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.

Page 15: Algoritmid ja andmestruktuurid

15

4. Kombinatoorika: permutatsioonid, kombinatsioonid, alamhulgad

Moodle … juri\Praktikum2\ylesanded2.pdf Ülesanne 1 (a + b + c)

Generaatori (generaator-funktsiooni) mõiste.

Page 16: Algoritmid ja andmestruktuurid

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

Page 17: Algoritmid ja andmestruktuurid

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

Page 18: Algoritmid ja andmestruktuurid

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?

Page 19: Algoritmid ja andmestruktuurid

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

Page 20: Algoritmid ja andmestruktuurid

20

Page 21: Algoritmid ja andmestruktuurid

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 )

Page 22: Algoritmid ja andmestruktuurid

22

Page 23: Algoritmid ja andmestruktuurid

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

Page 24: Algoritmid ja andmestruktuurid

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

Page 25: Algoritmid ja andmestruktuurid

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

Page 26: Algoritmid ja andmestruktuurid

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

Page 27: Algoritmid ja andmestruktuurid

27

Praktikum 4

0. Test 4

1. Test 3 vastus

2. Kirje, võti ja võtmefunktsioon

3. Paiskfunktsiooni mõiste

4. Praktikumitöö

Paiskfunktsioon

Page 28: Algoritmid ja andmestruktuurid

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

Page 29: Algoritmid ja andmestruktuurid

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

Page 30: Algoritmid ja andmestruktuurid

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

Page 31: Algoritmid ja andmestruktuurid

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%

Page 32: Algoritmid ja andmestruktuurid

32

Praktikumitöö programmi üks võimalik skeem

Page 33: Algoritmid ja andmestruktuurid

33

Praktikum 5

0. Test 5

1. Test 4 vastus

2. Erinevaid paiskfunktsioone

3. Sorteerimine paisktabeli abil (kimbumeetod)

4. Kodutöö nr 4

Paisktabel

Page 34: Algoritmid ja andmestruktuurid

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

Page 35: Algoritmid ja andmestruktuurid

35

2. Erinevaid paiskfunktsioone

Page 36: Algoritmid ja andmestruktuurid

36

Kimbumeetodi võimalik skeem

h(x) on monotoonne funktsioon

3. Sorteerimine paisktabeli abil (kimbumeetod)

Page 37: Algoritmid ja andmestruktuurid

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.

Page 38: Algoritmid ja andmestruktuurid

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.

Page 39: Algoritmid ja andmestruktuurid

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

Page 40: Algoritmid ja andmestruktuurid

40

Praktikum 7 Kahendpuud

0. Test 6

1. Etüüdid kahendpuul (vt ka AAbits)

2. Kahendotsimispuu

Kodutöö nr 5

Page 41: Algoritmid ja andmestruktuurid

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

Page 42: Algoritmid ja andmestruktuurid

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

Page 43: Algoritmid ja andmestruktuurid

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