praktikum 7 - kodu.ut.eekodu.ut.ee/~kiho/ads/fall14/slaidid/slaidid_pr7.pdfkahendpuu valmistamine ja...
Post on 30-Apr-2019
224 Views
Preview:
TRANSCRIPT
Praktikum 7Kahendpuud
Algoritmid ja andmestruktuurid
2014/2015 sügissemester
Jyri.Kiho@ut.ee
www.cs.ut.ee/~kiho/ads/fall14/
• Abivahendid kahendpuu loomiseks, kuvamiseks ja • töötlemiseks• Kahendpuu valmistamine ja kuvamine• Harjutusülesanded
KP_1. Täieliku kahendpuu valmistamineKP_2. Kahendpuu kõrgusKP_3. Tasakaalu kontrollimineKP_4. Kahendpuu ja puu läbimineKP_5. Aritmeetilise avaldise puuKP_6. Tipu järglaste koguarvKP_7. Tippudele kõrguse- ja tasemeväljadKP_8. Tasemete generaatorKP_9. Kompaktse kahendpuu valmistamineKP_10. Kahendpuu peegeldus
Abivahendid kahendpuu loomiseks, kuvamiseks ja töötlemiseks
Moodul Graaf.py
sisaldab klasside Tipp, Kaar ja Graaf kirjeldusi.
Kahendpuud käsitletakse kui graafi erijuhtu. Seetõttu on rakendatavad
graafitöötlemise funktsioonid klassist Graaf. Viimane sisaldab ka mõningaid
erifunktsioone just kahendpuu jaoks. Kahendpuu juureks on graafi esimene tipp
(tipp indeksiga 0).
Käivitatav Java-programm SebiKPuud.jar
Kahendpuu valmistamine ja kuvamine
Python
import os
os.system("java -jar SebiKPuud.jar -juhu 7 xxx.txt")
-- on loodud 7-tipuline juhu-kahendpuu ja see salvestatud faili xxx.txt (tabelkujul)
-- ühtlasi näidatakse seda kahendpuud ekraanil (kuvatakse see kahendpuu)
kp = graafFailist("xxx.txt")
-- vastavalt failis xxx.txt olevale tabelile loodud klassi Graaf isend kp
…
-- kp töötlemine (muutmine), näiteks:kp.tipud[0].seadaMärgend("00")
-- kp juure märgendiks seatud “00” (graafi g tippude list on g.tipud)
…kp.faili("yyy.txt")
-- kp salvestatud faili yyy.txt (tabelkujul)os.system("java -jar SebiKPuud.jar yyy.txt")
-- kuvatakse kahendpuu failist yyy.txt
KP_1. Täieliku kahendpuu valmistamine [Kiho 2003, lk 28]
Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: arv m – loodava kahendpuu tasemete arv.
Tulemus: täielik m-tasemeline kahendpuu.
Python
Ühetipulise (ainult juur) kahendpuu kp tegemine:kp = Graaf() -- tühi graaf
juur = Tipp() -- uus tühi tipp
juur.nimi = "[0;0]“ -- juure x := 0, juure y := 0
kp.lisadaTipp(juur)
Kahendpuu tegemisel määratakse tipukoordinaadid (x; y) ainult juurtipule.
Kahendpuus kp alluvateta tipule t mõlema alluva lisamine:uus = Tipp() -- tühi tipp (ka koordinaatideta)
kp.lisadaAlluv(t, uus, True) -- True: lisamine vasakuks alluvaks
uus = Tipp()
kp.lisadaAlluv(t, uus, False) -- False: lisamine paremaks alluvaks
Ehk lühemalt:kp.lisadaAlluv(t, Tipp(), True)
kp.lisadaAlluv(t, Tipp(), False)
KP_2. Kahendpuu kõrgus
Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu ja selle tipp.
Tulemus: antud tipust algava (alam)kahendpuu kõrgus.
Alampuu
juur kõrgus
A 4
B 3
C 2
D 2
E 1
F 1
G 1
Testi tulemuse näide
KP_3. Tasakaalu kontrollimine
Koostada programm järgmise ülesande lahendamiseks.
Antud: kahendpuu.
Tulemus: nende tippude järjend (listina), kus tasakaal on rikutud,
st tipu alluvate kõrgus erineb rohkem kui 1 võrra.
Tasakaal rikutud
tipus B
tipus C
On tasakaalus.
Testi tulemuse näited
KP_4-1. Kahendpuu läbimine [Kiho 2003, lk 29]
Kirjutada ja testida rekursiivsed funktsioonid järgmiste ülesannete lahendamiseks
Antud: kahendpuu ja selle tipp t.
Tulemus: tipust t algava kahendpuu tipud/tipumärgendid eesjärjestuses (listina).
Antud: kahendpuu ja selle tipp t.
Tulemus: tipust t algava kahendpuu tipud/tipumärgendid keskjärjestuses (listina).
Antud: kahendpuu ja selle tipp t.
Tulemus: tipust t algava kahendpuu tipud/tipumärgendid lõppjärjestuses (listina).
KP_4. Kahendpuu ja puu läbimine
Pythondef eesjrst(kp, t, m=False):
# Antud: kahendpuu kp ja tipp t selles ning tunnus m
# Tulemus: tagastatakse eesjärjestuses (listina)
# tipust t algava kahendpuu
# tipumärgendid, kui m = True
# tipud, kui m = False
…
KP_4-2. Puu läbimine
Kirjutada ja testida rekursiivsed funktsioonid järgmiste ülesannete lahendamiseks.
Antud: puu ja selle tipp t..
Tulemus: tipust t algava (alam)puu tipud eesjärjestuses (listina).
Antud: puu ja selle tipp t.
Tulemus: tipust t algava (alam)puu tipud lõppjärjestuses (listina).
Puu eesjrst:
A B C D E F G L K H
Puu loppjrst:
D C F L G K E H B A
Testi tulemuse näide
Puu väljastatud käsugaos.system("java –jar SebiPuud xxx.txt")
KP_5. Aritmeetilise avaldise puu
Koostada programm, mis valmistab (juhusliku) aritmeetilise avaldise kahendpuu
ja arvutab vastava avaldise väärtuse. (Vt ka järgmine slaid.)
Eraldi funktsioonidena kirjeldada järgmised alamülesanded:
KP_5-1. Aritmeetilise avaldise puu valmistamine
Kirjutada ja testida funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu.
Tulemus: antud kahendpuu muudetud 0-2 kahendpuuks (igale ühe alluvaga tipule
lisatud teine, puudunud alluv), seejärel
rippuvate tippude märgenditeks seatud juhuarvud,
ülejäänutele – binaarsete tehete märgid, juhuvalik (+ - * /) seast.
KP_5-2. Kahendpuu sulustatud tipumärgendid keskjärjestuses
Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu ja selle tipp t.
Tulemus: tipust t algava kahendpuu tippude märgendid keskjärjestuses listina,
mille esimeseks liikmeks on lisatud veel avav sulg ‘(‘ ja viimaseks sulgev sulg ‘)’.
Valmistada juhu-kahendpuu
Teisendada see 0-2 kahendpuuks ja seada tipumärgendid (KP_5-1)
Teha tipumärgendite (sulustatud) list (KP_5-2)
Evalueerida vastav sõne.
Programmi
KP_5
üldskeem:
L = ['(', '(', '9', ')', '/', '(', '(', '(', '0', ')', '-', '(', '5', ')', ')', '/','(', '-5', ')', ')', ')']selle listi esitus sõnena: ‘‘.join(L) = “((9)/(((0)-(5))/(-5)))”
Avaldise väärtuseks on eval("((9)/(((0)-(5))/(-5)))") = 9
Aritmeetilise avaldise kahendpuu (KOP_5-1 testi tulemuse) näide:
KOP_5-2 tulemus L selle kahendpuu korral (juurest alates):
KP_6. Tipu järglaste koguarv
Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu ja selle tipp.
Tulemus: antud tipu kõigi (vahetute ja kaugemate) järglaste koguarv
Tipp Järglasi
A 6
B 4
C 0
D 2
E 0
F 0
G 0
Testi tulemuse näide
KP_7. Tippudele kõrguse- ja tasemeväljad
KP_7-1. Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu kp, selle tipp t.
Tulemus: tipust t algavas kp alampuus on iga tipu u väljale "h" omistatud tipust u algava
alampuu kõrgus; funktsiooni väärtuseks saab tipust t algava alampuu kõrgus.
Testi tulemuse näideTipuväljadega täiendatud kahendpuu väljastatud käsugaos.system("java –jar SebiGraafi yyy.txt")
KP_7-2. Kirjutada ja testida rekursiivne funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu kp, selle tipp t ja tipu t tasemenumber m.
Tulemus: tipust t algavas kp alampuus on iga tipu väljale "tase" omistatud
tasemenumber; antud tipu tasemenumbriks on m, selle alluvatel m+1 jne.
Testi tulemuse näideTipuväljadega täiendatud kahendpuu väljastatud käsugaos.system("java –jar SebiGraafi yyy.txt")
Tipumärgendid
tasemeti:
A
B C
D E J
F I N O
G L K
H M P
Q
KP_8. Tasemete generaator
Kirjutada ja testida generaator-funktsioon järgmise ülesande lahendamiseks.
Antud: kahendpuu.
Tulemus: antakse välja järjekordse taseme tipud (listina).
Testi tulemuse näide
KP_9. Kompaktse kahendpuu valmistamine [Kiho 2003, lk 28]
Kirjutada ja testida funktsioon järgmise ülesande lahendamiseks.
Antud: arv n – loodava kahendpuu tippude arv.
Tulemus: kompaktne n-tipuline kahendpuu.
Programmi
KP_9
üldskeem:
top related