Puu (andmestruktuur): erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
Kalmakar (arutelu | kaastöö)
Resümee puudub
PResümee puudub
1. rida:
{{Keeletoimeta|lisaja=Kuriuss|aasta=2019|kuu=veebruar}}
[[Fail:Kahendpuu.png|pisi|Kahendpuu näidis]]
'''Puu''' on infotehnoloogias andmestruktuur, kus andmed on paigutatud puukujuliselt.
Puu on andmestruktuur, kus andmed on paigutatud puukujuliselt, koosneb tippudest (nodes) ja kaartest (edges), mis ühendab tippe (viited). Tipud, mis on ühendatud kaarega üleval asuva tipu külge on lapsed (childs) ja üleval asuv tipp on sellisel juhul vanem (parent). Kõige ülemine tipp on juur (root). Tippu, millel ei ole lapsi, nimetatakse leheks (leaf). Liikudes tipust vanemasse, sealt vanemasse jne jõuame Juurde. Esivanemad on kõik tipud mis jäävad tipu ja vaadeldava juures vahepeale. Puu kõrgus (tree height) on pikim tee lehest juureni. Järjestatud puu korral on defineeritud juur ja otse juurega ühendatud tipud on esimese taseme tipud (first level nodes, juure lapsed), esimese taseme tippudega otse ühendatud tipud on teise taseme tipud (esimese taseme tippude lapsed) jne ning laste järjekord vasakut paremale on oluline. Mets on vähemalt kahest puust koosnev puude kogum.<ref>http://opiobjektid.tptlive.ee/B3/ahelloendid_ja_puud.html</ref>
 
Puu koosneb tippudest (''nodes'') ja kaartest (''edges''), mis ühendavad tippe (''viited''). Tipud, mis on ühendatud kaarega üleval asuva tipu külge on lapsed (''childs'') ja üleval asuv tipp on sel juhul vanem (''parent''). Kõige ülemine tipp on juur (''root''). Tippu, millel ei ole lapsi, nimetatakse leheks (''leaf''). Liikudes tipust vanemasse, sealt vanemasse jne jõuame juurde. Esivanemad on kõik tipud, mis jäävad tipu ja vaadeldava juures vahepeale.
 
Puu on andmestruktuur, kus andmed on paigutatud puukujuliselt, koosneb tippudest (nodes) ja kaartest (edges), mis ühendab tippe (viited). Tipud, mis on ühendatud kaarega üleval asuva tipu külge on lapsed (childs) ja üleval asuv tipp on sellisel juhul vanem (parent). Kõige ülemine tipp on juur (root). Tippu, millel ei ole lapsi, nimetatakse leheks (leaf). Liikudes tipust vanemasse, sealt vanemasse jne jõuame Juurde. Esivanemad on kõik tipud mis jäävad tipu ja vaadeldava juures vahepeale. Puu kõrgus (''tree height'') on pikim tee lehest juureni. Järjestatud puu korral on defineeritud juur ja otse juurega ühendatud tipud on esimese taseme tipud (''first level nodes'', juure lapsed), esimese taseme tippudega otse ühendatud tipud on teise taseme tipud (esimese taseme tippude lapsed) jne ning laste järjekord vasakut paremale on oluline. Mets on vähemalt kahest puust koosnev puude kogum.<ref>http://opiobjektid.tptlive.ee/B3/ahelloendid_ja_puud.html</ref>
 
== Kahendpuu ==
Kahendpuu on selline puu, kus iga vanema võib olla mitteühtegimitte ühtegi, üks või kaks last ja laste järjekord on oluline.
Kahend-otsingupuu ([https://en.wikipedia.org/wiki/Binary_search_tree binary search tree]) on kahendpuu, mis on järjestatud. Tipust vasakul on alati väiksem suurus ja tipust paremal suurem suurus.<br>
 
Sellisest puust otsides võrreldakse otsitavat väärtust juurega, kui otsitav väärtus võrdub juure väärtusega, siis väärtus eksisteerib, kui aga juure väärtus ei võrdu otsitavaga, siis võrreldakse väärtust edasi, vastavalt kas vasaku või parema tippude hulgast kuni jõutakse leheni. Kui otsitav väärtus on võrdne mõne tipu väärtusega, siis on otsitav element olemas, kui aga ei leidu võrdset väärtust, siis otsitavat elementi ei ole. Selline otsimise viis on kordi kiirem kui oleks näiteks ahelloendi või massiivi läbivaatamine.<br>
<br>
 
== Puude kasutus ==
16. rida ⟶ 21. rida:
 
Tallinna ülikooli loengumaterjalis on esimese näitena, kuidas kasutada kahendpuud, väljatoodud ülesanne, kus tuleb kujutada aritmeetilist avaldist (b+c)/a+d(e-f) puuna.
 
[[Fail:Nimetu.png|pisi|Ül lahendus]]
 
Selle ülesande lahendus on näidatud kõrval oleval pildil, selline puu väljendab sellise avaldise tehete prioriteete. Sellise puuga antud avalise väärtuse leidmiseks on vaja osata läbida puud (rekursiivselt) lõppjärjestuses. Seega on selline rekursiivne tehnika ülioluline puude õppimisel. Materjalis kasutati seda näidet puude läbimise kolme n-ö klassikaliste järgnevuste (lõppjärjekorda, eesjärjekorda ja keskjärjekorda) õpetamiseks. Selline meetod võib olla sobiv õpilasele, kes on varasemaltvarem puu struktuuriga kokku puutunud, kuid kui esimene tutvub esimest korda sellega, siis võib teema raskeks jääda. Näiteks on Tartu Ülikooli Arvutiteaduste instituudi poolt välja antud Algoritmide ja andmestruktuuride ülesannete kogus enne aritmeetilise avaldise puu ülesandeid pühendatud terve peatükk puu läbimisele ehk Tallinna Ülikooli materjalis on eeldatud, et õpilane suudab käigult ära õppida mõlemad teemad korraga.<ref> Ahti Peder, Jüri Kiho, Härmel Nestra (2017). "Algoritmid ja andmestruktuurid ülesannete kogu". </ref>
 
== Puude järgnevused ==
Puu tippudest informatsiooni lugemiseks tuleb need tipud kuidagi läbida. Kuna puu on rekursiivne struktuur, siis on seda ka mitmed algoritmid, mida nende peal rakendada saab. Seda tehakse rekursiivselt igale alampuule. Kui puud läbitakse, siis käiakse igas tipus täpselt üks kord. Kolm levinumat puu läbimiseks mõeldud algoritmi on järgmised:<br>
'''Eesjärjekord'''* eesjärjekord – väljastab kõigepealt juure, läbib terve vasaku alampuu ja seejärel läbib parema alampuu. Tuleb meeles pidada, et igal alampuul on oma juur, mida väljastada. Eelmise peatüki pildil olev puu annaks lahenduseks + / + B C A * D - E F.<br>;
'''Keskjärjekord'''* keskjärjekord – läbib kõigepealt vasaku alampuu, siis väljastab juure ja siis läbib parema alampuu (jälle tuleb meeles pidada, et igal alampuul on oma juur). SelliselSelle meetodilmeetodiga puud läbides annab sama puu lahenduseks B + C / A + D * E - F.<br>;
'''Lõppjärjekord'''* lõppjärjekord – läbib kõigepealt vasaku alampuu, siis läbib parema alampuu ja lõpuks väljastab juure alles. Sellel meetodil puud läbides tuleb sama puu lahenduseks B C + A / D E F - * +.
 
 
== Puud graafiteoorias ==
 
Graafi nimetatakse puuks, kui ta on sidus ja ei sisalda tsükleid. Mets on graaf, mile kõik komponendid on puud. Puu rippuvad tipud on lehed ja ülejäänud on sisetipud.<br>
 
Sidusa graafi toespuuks nimetatakse sellist alamgraafi, mis sisaldab kõiki tippe ja on puu. Tegu on andmestrutuurina väga olulise graafiga, sest toesuspuu albil saame rakendada mitmeid algoritme nagu Primi algoritm ja Kruskali algoritm. Nende abil saab leida lühimat teed läbides kõik antud punktid teel. <br>
Kaalutud puu on puu, mille igale servale on antud kaal, puude kaalustamine on kasulik, kuna see see aitab juba eelpool mainitud kahte algoritmi rakendada, kuid ka näiteks Dijkstra algoritmi, mis aitab leida lihtsalt lühima tee ühest graafi tipust teise.<ref>{{netiviide|Autor=Valdis Laan|URL=https://courses.ms.ut.ee/LTMS.00.019/2018_spring/uploads/Main/kon.pdf|Pealkiri=Diskreetne matemaatika I.|Väljaanne=|Aeg=|Kasutatud=19.01.20198|Keel=eesti}}</ref> <br><br>
 
Kaalutud puu on puu, mille igale servale on antud kaal, puude kaalustamine on kasulik, kuna see see aitab juba eelpool mainitud kahte algoritmi rakendada, kuid ka näiteks Dijkstra algoritmi, mis aitab leida lihtsalt lühima tee ühest graafi tipust teise.<ref>{{netiviide|Autor=Valdis Laan|URL=https://courses.ms.ut.ee/LTMS.00.019/2018_spring/uploads/Main/kon.pdf|Pealkiri=Diskreetne matemaatika I.|Väljaanne=|Aeg=|Kasutatud=19.01.20198|Keel=eesti}}</ref> <br><br>
 
==Viited==
{{viited}}