47
Algoritmid ja andmestruktuurid Praktikum 2010/2011 kevadsemestril J. Liivi 2-203, N 12-14 Jüri Kiho

Algoritmid ja andmestruktuurid

  • Upload
    merv

  • View
    77

  • Download
    6

Embed Size (px)

DESCRIPTION

Algoritmid ja andmestruktuurid. Praktikum 20 10 /201 1 kevadsemestril J. Liivi 2-20 3 , N 12-14 Jüri Kiho. Osavõtt praktikumidest vajalik: Kodutööd antakse ainult praktikumides ja kontrollitakse (lõplikult) samuti praktikumides. - PowerPoint PPT Presentation

Citation preview

Page 1: Algoritmid ja andmestruktuurid

Algoritmid ja andmestruktuurid

Praktikum 2010/2011 kevadsemestrilJ. Liivi 2-203, N 12-14

Jüri Kiho

Page 2: Algoritmid ja andmestruktuurid

Osavõtt praktikumidest vajalik:

Kodutööd antakse ainult praktikumidesja 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).

Page 3: Algoritmid ja andmestruktuurid

Praktikum 1 3

Praktikum 1

• Keskkonna Amadeus_AlgPython installeerimine

• Sorteerimise ajalise keerukuse katseline hindamine

• Alamhulkade läbivaatamine

• Kodune ülesanne nr 1

Page 4: Algoritmid ja andmestruktuurid

Praktikum 1 4

Keskkonna Amadeus_AlgPython installeerimine

Keskkonnamuutuja PATH peab sisaldama teed Java programmini jar.exe

Kontrollimiseks Widowslogo+R … cmd … jar -uKui

'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

I.

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

Page 5: Algoritmid ja andmestruktuurid

Praktikum 1 5

III.Seadistada projektifailis (vasakus aknas):

C:\Python31\python vmt

Skeemiikooni avamiseks: hiire paremklõps.Langkriips (\): Alt+…, mitte AltGr+…

Salvestada muudetud projekt: Fail+Eksportida

Kirjutada programmide loetellu projekti viimases sektsioonis uue programmi nimi, ntproov.algpy

Salvestada muudetud projekt: Fail+Eksportida

Page 6: Algoritmid ja andmestruktuurid

Praktikum 1

Kolmekordne hiire vasakklõps programmi nimelprojektiaknas 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 nimesei tohi olla tühikut.

Page 7: Algoritmid ja andmestruktuurid

Praktikum 1 7

IV.Olemasoleva *.algpy programmi, nt pp.algpy lisamine projekti:

Kirjutada programmide loetellu (projekti viimases sektsioonis) lisatava programmi nimipp.algpy

Salvestada muudetud projekt: Fail+Eksportida

Salvestada fail pp.algpy töökausta AlgPython\workspace.

Page 8: Algoritmid ja andmestruktuurid

Praktikum 1 8

Lisada oma projekti programmid

graafikud.algpy - valemina antud funktsioonidajavott.algpy - sorteerimismeetodi ajakulugraafikudTabelist.algpy - tabelina antud funktsioonidalamhulgad.algpy - kõik alamhulkad või elementide kombinatsioonid

Katsetamiseks: avada (3xhiire-vasak programmi nimel) ja salvestada (Fail+Salvestada)

Page 9: Algoritmid ja andmestruktuurid

Praktikum 1 9

Praktikumitöö 1-1

Sorteerimise ajalise keerukuse katseline hindamine:

Ühele joonisele kujutada tööaja graafikud sorteerimismeetoditele pisteSort, kiirSort ja (pythoni) sorted

Page 10: Algoritmid ja andmestruktuurid

Praktikum 1 10

Kodutöö nr 1Hulga alamhulkade läbivaatamine, elementide kombinatsioonid

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.

Näidisülesandeid:

Tähtaeg: 24.02.2011

Page 11: Algoritmid ja andmestruktuurid

Praktikum 2,3 11

Praktikum 2,3

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

“MinuMakrod”RekursioonEkraanigraafika

Page 12: Algoritmid ja andmestruktuurid

Praktikum 2,3 12

Uuemad nõudedKodutöö 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.)

Page 13: Algoritmid ja andmestruktuurid

Praktikum 2,3 13

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+aAlt+def jne (üldiselt: Alt+makro)

Oma makrode kasutamine

Page 14: Algoritmid ja andmestruktuurid

Praktikum 2,3 14

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.

Oma (uute) makrode tegemine

Page 15: Algoritmid ja andmestruktuurid

Praktikum 2,3 15

Praktikumitöö 2,3 -1

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

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.

Rekursioon

Page 16: Algoritmid ja andmestruktuurid

Praktikum 2,3 16

Praktikumitöö 2,3 -2

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-->21-->32-->31-->23-->13-->21-->2

Rekursioon

Hanoi tornide ülesanne.Näiteprogramm: HanoiGr.jar

Page 17: Algoritmid ja andmestruktuurid

Praktikum 2,3 17

Praktikumitöö 2,3 -3Kirjutada 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 -- tahvel (canvas)http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm -- kuularid http://effbot.org/tkinterbook/ -- kogu raamat

RekursioonEkraanigraafika(tkinter)

Page 18: Algoritmid ja andmestruktuurid

Praktikum 2,3 18

Praktikumitöö 2,3 -4

B. Mõelda välja Eesti lipuga seonduv rekursiivne muster. Kirjutada programm selle rekursiivse mustri joonistamiseks. Näide:

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.

EkraanigraafikaRekursioon

Page 19: Algoritmid ja andmestruktuurid

Praktikum 4 19

Praktikum 4MagasinJärjekord

Praktikumitöö 4 - 1 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, nagulen(a), a.append(x), a.pop( ), a.insert(i, x). Vt ka http://docs.python.org/tutorial/datastructures.html

Page 20: Algoritmid ja andmestruktuurid

Praktikum 4 20

Kodutöö nr 2 – antakse praktikumis individuaalselt.

NB! Koostatavas programmis tuleb kasutada praktikumitööna realiseeritud magasini- või järjekorraoperatsioone.

Page 21: Algoritmid ja andmestruktuurid

Praktikum 5 21

Praktikum 5KlassGraafKahendpuu

Laadida töökausta workspace vajalikud vahendid:

1. Java käivitatav moodul SebiGraafi.jar 2. Java käivitatav moodul SebiPuud.jar (vajalik edaspidi)3. Java käivitatav moodul SebiKPuud.jar

4. Pythoni moodul Graaf.py,5. selle selgem ülevaade Graaf.algpy

6. Praktikumitöö hakatus P5kahendpuu.algpy

Page 22: Algoritmid ja andmestruktuurid

Praktikum 5 22

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.

Page 23: Algoritmid ja andmestruktuurid

Praktikum 5 23

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.

Page 24: Algoritmid ja andmestruktuurid

Praktikum 5 24

Praktikumitöö 5-1. Tipumärgendite seadmineViige 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

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 tt.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: …

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.

Page 25: Algoritmid ja andmestruktuurid

1) A a32) B … 3) C …

kpuu.txt

SebiKPuud

P5kahendpuu

g = graafFailist(“kpuu.txt”) --- antud

……g.faili(“kpuu1.txt”) --- tulemusgraaf

Graaf

tipud: [<A>, <B>, <C>…]

kaared: [(<A>, <C>, a), …]

1) … 2) …

kpuu1.txt

…töö-delda g…

Klassi Graaf isend g

Page 26: Algoritmid ja andmestruktuurid

Praktikum 5 26

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.

Page 27: Algoritmid ja andmestruktuurid

Praktikum 5 27

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!

Page 28: Algoritmid ja andmestruktuurid

Praktikum 6KahendpuuPuuGraaf

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 (infiks-kujul)

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 +

I. Etüüdid kahendpuul Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf

Page 29: Algoritmid ja andmestruktuurid

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 TippF-n naabertipud klassist Graaf

+

II. Etüüdid puul

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 GraafF-n otsidaKaar klassis GraafF-n lisadaKaar klassis GraafVäli algusTipp klassis KaarVäli lppTipp klassis KaarVä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 TippF-n väli klassist Tipp

+

III. Etüüdid graafil

Page 30: Algoritmid ja andmestruktuurid

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 spetsifikatsioonAntud: …Tulemus: …

Kõik programmis esinevad funktsioonid peavad olema testitud-silutud. Kõiki teste (programmi testimislõike) ei pea koos programmiga esitama.

Page 31: Algoritmid ja andmestruktuurid

Praktikum 7Kordused jadasKirje võtiPython: 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) perenimec) eesnime

Tekstifaili sisestamiseks: funktsioon txtin (makro Alt+txtin).

Page 32: Algoritmid ja andmestruktuurid

Praktikum 7 32

------------- TEST 1 (arvujada) -----------[14, 12, 21, 17, 20, 15, 22, 12, 15, 21, 25, 12, 13]12 esineb 3 korda21 esineb 2 korda15 esineb 2 kordaunikaalseid 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 kordaPaju Aili esineb 3 kordaunikaalseid 7 (58%)

1. Korduvate elementide otsimine antud järjendis

Väljund

Page 33: Algoritmid ja andmestruktuurid

Praktikum 7 33

------------- 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 kordaPaju Aili esineb 3 kordaunikaalseid 7 (58%)

Perekonnanimesid arvestades:Kask esineb 2 kordaPaju esineb 4 kordaunikaalseid 6 (50%)

Eesnimesid arvestades:Ants esineb 3 kordaAili esineb 3 kordaToomas esineb 2 kordaunikaalseid 4 (33%)

2 ja 3. Korduvate võtmetega elementide otsimineVäljund

Page 34: Algoritmid ja andmestruktuurid

------------- TEST 4 (kirjejada) -----------

Kirjed failist protokoll.txt.Pere- ja eesnimesid arvestades:Walther Martin esineb 2 kordaOja Jaan esineb 2 kordaTarvis Peeter esineb 2 kordaSalmu Peeter esineb 2 kordaAnton Arno esineb 2 korda…unikaalseid 4759 (99%)

Perenimesid arvestades:Hallika esineb 3 kordaoim esineb 2 kordaLehis esineb 2 kordaRaav esineb 2 kordaKesküla esineb 2 kordaFedotov esineb 2 kordaLehtmets esineb 3 kordaRohi esineb 2 korda…unikaalseid 2536 (53%)

Eesnimesid arvestades:…

4. Kirjefaili protokoll.txt uurimine

Väljund

1 Aukland Anders Norra 2:59:41 M35

VanuserühmLõpuaegKustKesRinnanumber

Kirje

Väljad, eraldaja \t

võtmeväli

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

Page 35: Algoritmid ja andmestruktuurid

Praktikum 8Räsifunktsioon hash()PaiskfunktsioonPaisktabel

Kodutöö nr 4 – antakse praktikumis individuaalselt.

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.

Page 36: Algoritmid ja andmestruktuurid

Praktikum 9 36

Praktikum 9 Kahendotsimispuu

Praktikumitöö 9-1. Kirjutada ja testida funktsioon antud kirje lisamiseks antud kahendotsimispuusse.

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

Page 37: Algoritmid ja andmestruktuurid

Praktikum 10 AVL-puu

Etüüdid 10-1, 10-2, 10-3, 10-4, 10-5 vt

AVL-etudes.algpy

Kodutöö nr 5 – antakse praktikumis individuaalselt.

Joonised:http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf lk 33,34

Page 38: Algoritmid ja andmestruktuurid

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

Page 39: Algoritmid ja andmestruktuurid

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)

Praktikum 12Teksti pakkimineHuffmani koodipuu

Page 40: Algoritmid ja andmestruktuurid

------------- 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.38c 115.38b 192.31, 269.23A 38.46[ 38.46: 38.46] 38.46; 115.38

Jada S:a:38.46ty:115.38c:115.38b:192.31,:269.23A:38.46ns:38.46ko:38.46]:38.46sk:115.38

Page 41: Algoritmid ja andmestruktuurid

------------- TEST 2 (Huffmani koodipuu loomine)Jatkamiseks vajutada Enter ...

Koodipuu:

1) 0:999.98[400;10] --> 3 --> 22) 0:576.91[340;60] --> 14 --> 43) 0:423.07[460;60] --> 13 --> 54) 0:307.68[40;110] --> 12 --> 65) 0:230.76[520;110] --> 11 --> 196) 0:192.3[160;160] --> 9 --> 77) 0:115.38[220;210] --> 16 --> 88) 0:76.92[280;260] --> 18 --> 159) 0:76.92[100;210] --> 10 --> 1710) 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]

Page 42: Algoritmid ja andmestruktuurid

------------- TEST 3 (kooditabel, kodeerimine, vordlus)Jatkamiseks vajutada Enter ...

Kooditabel:a 00100A 001110c 000b 10 110, 01[ 00110: 00101] 001111; 111

Kood: 001000010110010000100001100110010011001001111111101110001111001110110110001110tekst = "a:b,c,c,b,b,[,];b;c;b, A"Teksti pikkus baitides: 26Koodi 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"

Page 43: Algoritmid ja andmestruktuurid

Kurg

Rankla

Rebane

Tiidla M

Trees

LaasLiivoja

KirsimäeMerisalu

Tiidla PLoskit

MoistoValli

KaasikKruusmaaTimberg

Rühmatöö tiimid: juht (ül 6b) liikmed

Projekti tähtaeg 10. mai

Esitada koos hindeettepanekutega liikmeteleskaalal 100(oma osa tehtud) … 0(ei teinud midagi)

Rühmatöö (2 inim.): 6b + 6a,c,d

Rühmatöö (3 inimest): 6b + 6a + 6c,d

Rühmatöö (4 inimest): 6b + 6a + 6c + 6d

Ülesanne Tegija Tähtaeg

6a Laas 4. mai

6b Kurg 5. mai

6c,d Liivoja 6. mai

Kompleks-

testimineKurg 9. mai

Esitamine Kurg 10. mai

Rühmatöö näidisplaan

Kodutöö nr 6

Page 44: Algoritmid ja andmestruktuurid

Praktikum 13Graafi läbimineLühim tee graafis

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.

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.

http://vvv.cs.ut.ee/~kiho/ads/spring10/Kirjandus/e-koopiaid/ads2003.pdf : 6.2, 6.3

Page 45: Algoritmid ja andmestruktuurid

Praktikum 14TipuklassidGraafi minimaalne toesKruskali algoritm

A

H

D

B

EK

F

C

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.

F

D H

A

C

B E K

Pärast ühendamist (vt sinine viit joonisel):F

D H

A

C

B E K

F ja C on klasside esindajad

F on klassi esindaja

Page 46: Algoritmid ja andmestruktuurid

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 ~ :

• Graaf g failist g.txt• 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.

eemaldadaKaar(t1, t2) -- uuendatud moodulist Graaf.py (kaustas Praktikum14)

Page 47: Algoritmid ja andmestruktuurid

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