Algoritmid ja andmestruktuurid
This presentation is the property of its rightful owner.
Sponsored Links
1 / 47

Algoritmid ja andmestruktuurid PowerPoint PPT Presentation


  • 80 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

Algoritmid ja andmestruktuurid

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Algoritmid ja andmestruktuurid

Algoritmid ja andmestruktuurid

Praktikum 2010/2011 kevadsemestril

J. Liivi 2-203, N 12-14

Jüri Kiho


Algoritmid ja andmestruktuurid

Osavõtt praktikumidest vajalik:

Kodutööd antakse ainult praktikumides

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


Algoritmid ja andmestruktuurid

Praktikum 1

  • Keskkonna Amadeus_AlgPython installeerimine

  • Sorteerimise ajalise keerukuse katseline hindamine

  • Alamhulkade läbivaatamine

  • Kodune ülesanne nr 1

Praktikum 1


Algoritmid ja andmestruktuurid

Keskkonna Amadeus_AlgPython installeerimine

I.

Keskkonnamuutuja PATH peab sisaldama teed Java programmini jar.exe

Kontrollimiseks Widowslogo+R … cmd … jar -u

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

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

KaustasAlgPython käivitada AlgPythonStarter.jar

Praktikum 1


Algoritmid ja andmestruktuurid

III.

Seadistada projektifailis (vasakus aknas):

Skeemiikooni avamiseks: hiire paremklõps.

Langkriips (\): Alt+…, mitte AltGr+…

C:\Python31\python

vmt

Salvestada muudetud projekt:

Fail+Eksportida

Kirjutada programmide loetellu projekti

viimases sektsioonis uue programmi nimi, nt

proov.algpy

Salvestada muudetud projekt:

Fail+Eksportida

Praktikum 1


Algoritmid ja andmestruktuurid

Kolmekordne hiire vasakklõps programmi nimel

projektiaknas

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 nimes

ei tohi olla tühikut.

Praktikum 1


Algoritmid ja andmestruktuurid

IV.

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

Salvestada fail pp.algpy töökausta

AlgPython\workspace.

Kirjutada programmide loetellu (projekti

viimases sektsioonis) lisatava programmi nimi

pp.algpy

Salvestada muudetud projekt:

Fail+Eksportida

Praktikum 1


Algoritmid ja andmestruktuurid

Lisada oma projekti programmid

graafikud.algpy - valemina antud funktsioonid

ajavott.algpy - sorteerimismeetodi ajakulu

graafikudTabelist.algpy - tabelina antud funktsioonid

alamhulgad.algpy - kõik alamhulkad või elementide kombinatsioonid

Katsetamiseks: avada (3xhiire-vasak programmi nimel)

ja salvestada (Fail+Salvestada)

Praktikum 1


Algoritmid ja andmestruktuurid

Praktikumitöö 1-1

Sorteerimise ajalise keerukuse katseline hindamine:

Ühele joonisele kujutada tööaja graafikud sorteerimismeetoditele

pisteSort,

kiirSort

ja (pythoni) sorted

Praktikum 1


Algoritmid ja andmestruktuurid

Kodutöö nr 1

Hulga alamhulkade läbivaatamine, elementide kombinatsioonid

Tähtaeg: 24.02.2011

Näidisülesandeid:

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.

Praktikum 1


Algoritmid ja andmestruktuurid

Praktikum2,3

“MinuMakrod”

Rekursioon

Ekraanigraafika

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

Praktikum 2,3


Algoritmid ja andmestruktuurid

Uuemad nõuded

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

Praktikum 2,3


Algoritmid ja andmestruktuurid

Oma makrode kasutamine

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+a

Alt+def

jne (üldiselt: Alt+makro)

Praktikum 2,3


Algoritmid ja andmestruktuurid

Oma (uute) makrode tegemine

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.

Praktikum 2,3


Algoritmid ja andmestruktuurid

Rekursioon

Praktikumitöö 2,3 -1

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.

  • 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

Praktikum 2,3


Algoritmid ja andmestruktuurid

Rekursioon

Praktikumitöö 2,3 -2

Hanoi tornide ülesanne.

Näiteprogramm: HanoiGr.jar

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

1-->3

2-->3

1-->2

3-->1

3-->2

1-->2

Praktikum 2,3


Algoritmid ja andmestruktuurid

Praktikumitöö 2,3 -3

Rekursioon

Ekraanigraafika

(tkinter)

Kirjutada 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

Praktikum 2,3


Algoritmid ja andmestruktuurid

Praktikumitöö 2,3 -4

Ekraanigraafika

Rekursioon

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.

B. Mõelda välja Eesti lipuga seonduv rekursiivne muster.

Kirjutada programm selle rekursiivse mustri joonistamiseks. Näide:

Praktikum 2,3


Algoritmid ja andmestruktuurid

Magasin

Järjekord

Praktikum4

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 lisadaprojekti 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 lisadaprojekti programmide loetellu.

Näpunäide. Soovitatav on silmas pidada järjendiga (a) seotud operatsioone, nagu

len(a), a.append(x), a.pop( ), a.insert(i, x).

Vt ka http://docs.python.org/tutorial/datastructures.html

Praktikum 4


Algoritmid ja andmestruktuurid

Kodutöö nr 2 – antakse praktikumis individuaalselt.

NB! Koostatavas programmis tuleb kasutada praktikumitööna

realiseeritud magasini- või järjekorraoperatsioone.

Praktikum 4


Algoritmid ja andmestruktuurid

Klass

Graaf

Kahendpuu

Praktikum5

  • Laadida töökausta workspace vajalikud vahendid:

    • Java käivitatav moodul SebiGraafi.jar

    • Java käivitatav moodul SebiPuud.jar (vajalik edaspidi)

    • Java käivitatav moodul SebiKPuud.jar

    • Pythoni moodul Graaf.py,

    • selle selgem ülevaade Graaf.algpy

    • Praktikumitöö hakatus P5kahendpuu.algpy

Praktikum 5


Algoritmid ja andmestruktuurid

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.

Praktikum 5


Algoritmid ja andmestruktuurid

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.

Praktikum 5


Algoritmid ja andmestruktuurid

Praktikumitöö 5-1. Tipumärgendite seadmine

Viige 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

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.

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 t

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

Praktikum 5


Algoritmid ja andmestruktuurid

SebiKPuud

P5kahendpuu

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

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

kpuu.txt

  • A a3

  • B …

  • C …

Klassi Graaf isend g

Graaf

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

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

töö-

delda g

kpuu1.txt


Algoritmid ja andmestruktuurid

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.

Praktikum 5


Algoritmid ja andmestruktuurid

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!

Praktikum 5


Algoritmid ja andmestruktuurid

Kahendpuu

Puu

Graaf

Praktikum6

I. Etüüdid kahendpuul

Kõik kasutavad funktsioone vasakAlluv ja paremAllluv klassist Graaf


Algoritmid ja andmestruktuurid

II. Etüüdid puul

III. Etüüdid graafil


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 spetsifikatsioon

Antud: …

Tulemus: …

Kõik programmis esinevad funktsioonid peavad olema testitud-silutud.

Kõiki teste (programmi testimislõike) ei pea koos programmiga esitama.


Algoritmid ja andmestruktuurid

Kordused jadas

Kirje võti

Python: lambda

Praktikum7

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.

  • Korduvate elementide otsimine antud järjendis

  • Korduvate võtmetega elementide otsimine: antud on nii järjend kui ka funktsioon (võtmefn) elemendi võtme arvutamiseks

  • 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

  • Rakendada loodud programmi kirjefaili protokoll.txt uurimiseks, lugedes kirje võtmeks

  • a) pere- ja eesnime (kirje.split(’\t’)[1])

  • b) perenime

  • c) eesnime

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


Algoritmid ja andmestruktuurid

1. Korduvate elementide otsimine antud järjendis

Väljund

------------- TEST 1 (arvujada) -----------

[14, 12, 21, 17, 20, 15, 22, 12, 15, 21, 25, 12, 13]

12 esineb 3 korda

21 esineb 2 korda

15 esineb 2 korda

unikaalseid 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 korda

Paju Aili esineb 3 korda

unikaalseid 7 (58%)

Praktikum 7


Algoritmid ja andmestruktuurid

2 ja 3. Korduvate võtmetega elementide otsimine

Väljund

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

Paju Aili esineb 3 korda

unikaalseid 7 (58%)

Perekonnanimesid arvestades:

Kask esineb 2 korda

Paju esineb 4 korda

unikaalseid 6 (50%)

Eesnimesid arvestades:

Ants esineb 3 korda

Aili esineb 3 korda

Toomas esineb 2 korda

unikaalseid 4 (33%)

Praktikum 7


Algoritmid ja andmestruktuurid

Väljund

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

Kirjed failist protokoll.txt.

Pere- ja eesnimesid arvestades:

Walther Martin esineb 2 korda

Oja Jaan esineb 2 korda

Tarvis Peeter esineb 2 korda

Salmu Peeter esineb 2 korda

Anton Arno esineb 2 korda

unikaalseid 4759 (99%)

Perenimesid arvestades:

Hallika esineb 3 korda

oim esineb 2 korda

Lehis esineb 2 korda

Raav esineb 2 korda

Kesküla esineb 2 korda

Fedotov esineb 2 korda

Lehtmets esineb 3 korda

Rohi esineb 2 korda

unikaalseid 2536 (53%)

Eesnimesid arvestades:

4. Kirjefaili protokoll.txt uurimine

Kirje

1Aukland AndersNorra2:59:41M35

võtmeväli

Vanuserühm

Lõpuaeg

Kust

Kes

Rinnanumber

Väljad, eraldaja \t

Võti: pere- ja eesnimi, vahel 1 tühik

1Aukland AndersNorra2:59:41M35

Võti: perenimi

1Aukland AndersNorra2:59:41M35

Võti: eesnimi


Algoritmid ja andmestruktuurid

Räsifunktsioon hash()

Paiskfunktsioon

Paisktabel

Praktikum8

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.

Kodutöö nr 4 – antakse praktikumis individuaalselt.


Algoritmid ja andmestruktuurid

Praktikum9

Kahendotsimispuu

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-1. Kirjutada ja testida funktsioon antud kirje

lisamiseks antud kahendotsimispuusse.

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.

Praktikum 9


Algoritmid ja andmestruktuurid

Praktikum10

AVL-puu

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

vt

AVL-etudes.algpy

Joonised:

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

Kodutöö nr 5 – antakse praktikumis individuaalselt.


Algoritmid ja andmestruktuurid

Praktikum11

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


Algoritmid ja andmestruktuurid

Teksti pakkimine

Huffmani koodipuu

Praktikum12

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)


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

c 115.38

b 192.31

, 269.23

A 38.46

[ 38.46

: 38.46

] 38.46

; 115.38

Jada S:

a:38.46

ty:115.38

c:115.38

b:192.31

,:269.23

A:38.46

ns:38.46

ko:38.46

]:38.46

sk:115.38


Algoritmid ja andmestruktuurid

------------- TEST 2 (Huffmani koodipuu loomine)

Jatkamiseks vajutada Enter ...

Koodipuu:

1) 0:999.98[400;10] --> 3 --> 2

2) 0:576.91[340;60] --> 14 --> 4

3) 0:423.07[460;60] --> 13 --> 5

4) 0:307.68[40;110] --> 12 --> 6

5) 0:230.76[520;110] --> 11 --> 19

6) 0:192.3[160;160] --> 9 --> 7

7) 0:115.38[220;210] --> 16 --> 8

8) 0:76.92[280;260] --> 18 --> 15

9) 0:76.92[100;210] --> 10 --> 17

10) 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]


Algoritmid ja andmestruktuurid

------------- TEST 3 (kooditabel, kodeerimine, vordlus)

Jatkamiseks vajutada Enter ...

Kooditabel:

a 00100

A 001110

c 000

b 10

110

, 01

[ 00110

: 00101

] 001111

; 111

Kood:

001000010110010000100001100110010011001001111111101110001111001110110110001110

tekst = "a:b,c,c,b,b,[,];b;c;b, A"

Teksti pikkus baitides: 26

Koodi 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"


Algoritmid ja andmestruktuurid

Kodutöö nr 6

Rühmatöö tiimid:

juht (ül 6b) liikmed

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

Laas

Liivoja

Kurg

Rankla

Rebane

Tiidla M

Trees

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

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

Kirsimäe

Merisalu

Rühmatöö näidisplaan

Kaasik

Kruusmaa

Timberg

Tiidla P

Loskit

Moisto

Valli

Projekti tähtaeg 10. mai

Esitada koos hindeettepanekutega liikmetele

skaalal 100(oma osa tehtud) … 0(ei teinud midagi)


Algoritmid ja andmestruktuurid

Graafi läbimine

Lühim tee graafis

Praktikum13

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.

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.

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


Algoritmid ja andmestruktuurid

Tipuklassid

Graafi minimaalne toes

Kruskali algoritm

Praktikum14

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.

H

D

C

F

A

F

K

H

B

E

D

F ja C on klasside esindajad

C

A

B

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

F

E

H

C

D

K

K

B

E

A

F on klassi esindaja


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.

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

(kaustas Praktikum14)

P14-2 lahendus on tarvis esitada kodutöö nr 8 kättesaamiseks.


Algoritmid ja andmestruktuurid

Praktikum15

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


  • Login