U ovom dijelu upoznat ćemo strukturu podataka stablo, uvesti osnovnu terminologiju, implementaciju i algoritme nad tom strukturom.

Similar documents
Data Structures and and Algorithm Xiaoqing Zheng

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama

TEORIJA SKUPOVA Zadaci

Asocijativna polja POGLAVLJE Ključevi kao cijeli brojevi

Projektovanje paralelnih algoritama II

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

Osobine metode rezolucije: zaustavlja se, pouzdanost i kompletnost. Iskazna logika 4

Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

Mathcad sa algoritmima

ALGORITMI PODIJELI PA VLADAJ

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele.

pretraživanje teksta Knuth-Morris-Pratt algoritam

Katedra za računarsku tehniku i informatiku

Katedra za računarsku tehniku i informatiku

ALGORITAM FAKTORIZACIJE GNFS

Metode praćenja planova

Nilpotentni operatori i matrice

Linearne strukture podataka. Nelinearne strukture podataka

Grafovi. Osnovni algoritmi sa grafovima. Predstavljanje grafova

Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

Konstrukcija i analiza algoritama

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu

Karakteri konačnih Abelovih grupa

Red veze za benzen. Slika 1.

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

DISTRIBUIRANI ALGORITMI I SISTEMI

Uvod u relacione baze podataka

Maja Antolović Algoritmi u teoriji brojeva

Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1

searching algorithms

NIZOVI I REDOVI FUNKCIJA

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK BINARNI POLINOMI. Diplomski rad. Voditelj rada: doc. dr. sc. Goranka Nogo. Zagreb, 2017.

SITO POLJA BROJEVA. Dario Maltarski PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: Doc. dr. sc.

PRIMJENA USMJERENIH HIPERGRAFOVA ZA PREDSTAVLJANJE FUNKCIONALNIH ZAVISNOSTI U RELACIONIM MODELIMA

Vektori u ravnini i prostoru. Rudolf Scitovski, Ivan Vazler. 10. svibnja Uvod 1

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin

Formalni postupci u oblikovanju računalnih sustava

Ariana Trstenjak Kvadratne forme

Nekoliko kombinatornih dokaza

KLASIFIKACIJSKA STABLA

Dr. Željko Jurić: Matematička logika i teorija izračunljivosti Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu.

Turingovi strojevi Opis Turingovog stroja Odluµcivost logike prvog reda. Lipanj Odluµcivost i izraµcunljivost

Hornerov algoritam i primjene

Sveučilište J.J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni preddiplomski studij matematike. Ivana Oreški REKURZIJE.

Matrice traga nula math.e Vol. 26. math.e. Hrvatski matematički elektronički časopis. Matrice traga nula. komutator linearna algebra. Sažetak.

Linearno programiranje i primjene

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28.

Pellova jednadžba. Pell s equation

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM

Fibonaccijev brojevni sustav

UNIVERZITET U BEOGRADU MATEMATIČKI FAKULTET

POOPĆENJE KLASIČNIH TEOREMA ZATVARANJA PONCELETOVOG TIPA

DISKRETNI LOGARITAM. 1 Uvod. MAT-KOL (Banja Luka) ISSN (p), ISSN (o) Vol. XVII (2)(2011), 43-52

Metode rješavanja kvadratičnog problema pridruživanja

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku

Ivan Soldo. Sažetak. U članku se analiziraju različiti načini množenja matrica. Svaki od njih ilustriran je primjerom.

O GLATKIM GRAFOVIMA KOMPATIBILNIM SA TEJLOROVIM OPERACIJAMA

Prsten cijelih brojeva

DES I AES. Ivan Nad PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Diplomski rad. Voditelj rada: doc.dr.sc.

HRVATSKA MATEMATIČKA OLIMPIJADA

Mirela Nogolica Norme Završni rad

Zanimljive rekurzije

Quasi-Newtonove metode

Matea Ugrica. Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni diplomski studij matematike i računarstva

Mostovi Kaliningrada nekad i sada

Sveučilište J.J. Strossmayera u Osijeku. Odjel za matematiku. David Komesarović. Mooreovi grafovi. Diplomski rad. Osijek, 2017.

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku DIOFANTSKE JEDNADŽBE

Funkcijske jednadºbe

Metode izračunavanja determinanti matrica n-tog reda

PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK. Marina Zrno KOMUTATIVNI PRSTENI. Diplomski rad. Voditelj rada: prof.dr.sc.

O aksiomu izbora, cipelama i čarapama

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

Iskazna logika 1. Matematička logika u računarstvu. oktobar 2012

Pogled u povijest razvoja algoritama

Primjena optimizacije kolonijom mrava na rješavanje problema trgovačkog putnika

Primjena graf algoritama za pronalaºenje optimalne rute na mapama

Neprekidan slučajan vektor

Matrice u Maple-u. Upisivanje matrica

Metoda parcijalnih najmanjih kvadrata: Regresijski model

Konstekstno slobodne gramatike

SHEME DIGITALNOG POTPISA

Uvod u dinamičko programiranje

Matrične dekompozicije i primjene

Karakterizacija problema zadovoljenja uslova širine 1

Neke klase maksimalnih hiperklonova

Grupiranje podataka u skupine 1 Rudolf Scitovski, Odjela za matematiku, Sveučilište u Osijeku 2

Neke primene teorije fazi skupova i fazi logike u procesiranju slika

Pitagorine trojke. Uvod

U člnaku se nastoji na jednostavan i sažet način bez ulaženja u egzaktne i formalizirane dokaze postići slijedeće:

Položaj nultočaka polinoma

Hamiltonovi grafovi i digrafovi

PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA

Mersenneovi i savršeni brojevi

AKSIOM IZBORA I EKVIVALENCIJE

Rešenja zadataka za vežbu na relacionoj algebri i relacionom računu

Simetrične matrice, kvadratne forme i matrične norme

Transcription:

POGLAVLJE Stabla U ovom dijelu upoznat ćemo strukturu podataka stablo, uvesti osnovnu terminologiju, implementaciju i algoritme nad tom strukturom..1 Stabla Stabla su vrlo fleksibilna nelinearna struktura podataka koje služe u predstavljanju podataka koje implicitno podrazumijevaju hijerarhijski odnos predak-nasljednik. Matematički gledano, stablo je aciklički povezani graf. x T y y z Slika.1: generalno stablo s 3 istaknuta čvora. Stablo T je konačan skup elemenata sa svojstvima: postoji specijalni element zvan korijen stabla root[t] svaki nekorijenski čvor predstavlja novi korijenski čvor za podstablo stabla T. Osnovna terminologija: 85

8 Stabla Korijen je prvi element u stablu, u hijerarhiji stabla je element koji nema roditelja. Ostali elementi u hijerahiji zovemo čvorovi. Stupanj čvora je broj podstabala pri čvoru u danom stablu. Stupanj stabla je maksimalni stupanj čvora u danom stablu. Bilo koji čvor u stablu čiji stupanj je jednak 0 kažemo da je list. Stablo je strukturirano u nekoliko nivoa. Čitavo stablo je strukturirano tako da korijenski čvor se nalazi na nivou 0, sljedeći neposredni nasljedni čvorovi (djeca) se nalaze na nivou 1, a njihova neposredna djeca na nivou 2 itd. Općenito, ako je čvor na k-tom nivou, njegov neposredni nasljednik se nalazi na k + 1 nivou. Maksimalni broj nivoa u stablu zovemo dubina/visina stabla. Put u stablu niz čvorova x i, x i+1,..., x i+k tako da je x i roditelj od x i+1. Duljina puta u stablu je onda x i, x i+1,..., x i+k 1, dakle, broj čvorova koje trebamo posjetiti od čvora x i do čvora x i+1. Implementacija stabla Želimo sada utvrditi kako možemo stablo predstaviti u računalu. Slika.2 prikazuje konceptualnu reprezentaciju stabla. Stabla se mogu prikazati pomoću pokazivača ili matrica incidencije. Upravo u spomenutoj slici pokazan je prvi način. Slika.2: implementacija stabla s pokazivačima Jedan način reprezentacije je korištenje pokazivača na nasljednike i pretka ukoliko stupanj svih čvorova nije proizvoljno velik. U najgorem slučaju za svaki čvor stabla morali bi definirati broj pokazivača koji odgovara maksimalnom stupnju stabla (slika.2 (a)). Reprezentiranja stabla u kojoj je potrebno fiksan broj pokazivača jest reprezentacija lijevo dijete - desni brat odnosno left-child-right-sibling (LCRS). Reprezentacija je prikazana na Slici.2 (b). Primjer.1. Dano je stablo T na sljedećoj slici: Utvrdite π[x], Left-Child[x], Right-Sibling[x], leaves[t], depth[t], gdje je x = i prikažite ga u LCRS reprezentaciji.

.2. Binarno stablo 87 0 1 2 3 4 5 7 8 10 11 12 13 Rješenje. roditelj: π[x] = 2, lijevo dijete: Left-Child[x] = nil, desni brat: Right-Sibling[x] = 7, listovi: leaves[t] = { 4, 11,, 7,, 10 }, dubina stabla: depth[t] = 3. LCRS reprezentacija dana je na slici (b). Stabla predstavljaju široku klasu strukture podataka i teže je dati generalan opis operacija i svojstava na općem nivou, stoga ćemo obratiti pozornost na jednu posebnu podklasu stabala. Od posebnog interesa proučavat ćemo stablo u kojem svaki čvor može imati najviše 2 nasljednika. Definirati ćemo nekoliko važnih operacija koje se mogu proširiti i na generalna stabla uz neke tehničke modifikacije..2 Binarno stablo Binarno stablo T je definirano kao konačan skup elemenata, zvanih čvorovi, tako da vrijedi jedno od sljedećih svojstava: 1. T = nil (tzv. null stablo) (trivijalni slučaj stablo nema vrhova) 2. za svaki x T postoje podstabla T L (x), T R (x) kojima je x korijenski čvor. Par disjunktnih binarnih stabala T L i T R zovemo lijevo odnosno desno podstablo. / / / / / / (a) (b) Binarno stablo možemo implementirati koristeći reprezentaciju lijevo-dijete-desni-brat ili koristeći reprezentaciju lijevi-dijete-desno-dijete (Left-Child-Right-Child reprezentacija).

88 Stabla Obilazak stabla Left-Child-Right-Child reprezentacija stabla nam omogućuje obilazak stabla na nekoliko načina. Uzmimo da želimo raditi obilazak iz nekog čvora x T: Preorder obilazak (NLD) posjeti prvo čvor x, zatim rekurzivno lijevo podstablo T x,l i rekurzivno desno podstablo T x,r. Inorder obilazak (LND) posjeti prvo lijevo podstablo od x T x,l, zatim čvor x i desno podstablo od x T x,r. Postorder obilazak (LDN) posjeti rekurzivno prvo lijevo podstablo od x T x,l, zatim rekurzivno desno podstablo od x T x,r. Preorder-Tree-Walk(x) 1 if x = nil 2 then print key[x] 3 Preorder-Tree-Walk(left[x]) 4 Preorder-Tree-Walk(right[x]) Inorder-Tree-Walk(x) 1 if x = nil 2 then Inorder-Tree-Walk(left[x]) 3 print key[x] 4 Inorder-Tree-Walk(right[x]) Postorder-Tree-Walk(x) 1 if x = nil 2 then Postorder-Tree-Walk(left[x]) 3 Postorder-Tree-Walk(right[x]) 4 print key[x] Primjer.2. Dano je stablo T čiji su key vrijednosti elementi iz alfabeta A = {a, b, c,..., z}. Ispišite preorder, inorder, postorder obilazak stabla T iz korijenskog čvora. r a b c d e f g h

.2. Binarno stablo 8 Rješenje. Algoritmi obilazaka vraćaju sljedeće rješenje: preorder: r, a, c, f, d, b, e, g, h inorder: f, c, a, d, r, b, g, e, h postorder: f, c, d, a, h, e, b, r Primjer.3. Dano je stablo T čiji su key vrijednosti iz A ASCII. Ispišite preorder, inorder, postorder obilazak stabla T iz korijenskog čvora. r a 3 1 f g 2 8 z 4 d Rješenje. Algoritmi obilazaka vraćaju sljedeće rješenje: preorder: r, a, 3, 1,, z, 2,, 4, f, 8 inorder: a, r, z,, 1, b, 2, 4, 3, f, 8, d postorder: a, z,, b, 4, 2, 1, d, 8, f, 3, r Primjer.4. Pokažite da je vremenska složenost Preoder-Tree-Walk procedure (a samim time i ostalih procedura obilazaka stabla) na stablu s n čvorova jednaka O(n). Rješenje. Označimo s T(n) funkciju vremenske složenosti izvršenja Preoder-Tree-Walk procedure na binarnom stablu koje sadrži n elemenata i uzmimo da vršimo obilazak iz nekog čvora x T koje sadrži u lijevom podstablu k čvorova, a u desnom podstablu n k 1 čvorova. Vrijeme izvršenja algoritma sada možemo izraziti rekurzijom (umjesto asimptotskih ocjena uzmimo konstante!): { c, n = 0 T(n) = T(k) + T(n k 1) + d, n > 0 Rekurziju možemo riješiti primjenom rekurzivnog stabla, ali možemo i jednostavnije primjenom matematičke indukcije: Pokazat ćemo da je T(n) = (c + d)n + c = O(n). Baza indukcije vrijedi: T(0) = (c + d)n + c = c, za n > 0 imamo: T(n) = T(k) + T(n k 1) + d (pretp. ind.) = ((c + d)k + c) + ((c + d)(n k 1) + c) + d = (c + d)n + c

0 Stabla što dokazuje tvrdnju, dakle T(n) = O(n). Ukoliko želimo imati dinamičke operacije pretraživanja, dodavanja i brisanja potrebno je definirati uređaj na binarnom stablu..3 Binarno poredano stablo Binarno poredano stablo (engl. binary search tree) je binarno stablo T koje zadovoljava svojstvo binarnog poredanog stabla: Za čvor x T, i za y T L (x) tada vrijedi key[x] key[y], u protivnom, ukoliko je y T R (x), tada je key[x] key[y]. Primjer.5. Za skup ključeva {1, 4, 5, 10, 1, 17, 21} generirajte binarno poredano stablo visine redom 2, 3, 4. Rješenje. Generirati stablo možemo na nakoliko način uzimajuću u obzir uređaj. Ovisno o visini stabla imamo sljedeće realizacije: 10 1 4 17 5 17 1 5 1 21 4 10 21 height[t ] = 2 1 height[t ] = 3 17 10 21 5 1 4 1 height[t ] = 4 Operacije nad binarnim poredanim stablom Definirati ćemo nekoliko operacija koje ćemo izvršavati nad strukurom stabla: potraga za određenim ključem u stablu. nalaženje čvora s minimalnim odnosno maksimalnim ključem.

.3. Binarno poredano stablo 1 za dani čvor pronaći njegova prethodnika, odnosno sljedbenika na temelju uređaja binarnog poredanog stabla. ubacivanje odnosno brisanje čvorova iz stabla. i pokazati da sve ove operacije možemo izvršiti u O(h) vremenu gdje je h visina stabla. Pretraživanje binarnog poredanog stabla Za dani čvor x u BST T algoritam nalazi čvor s ključem k u podstablu T x. Ukoliko takvog čvora nema vraća nil vrijednost. Vremenska složenost algoritma je O(h). Tree-Search(x, k) 1 If x = nil or k = key[x] 2 then return x 3 if k < key[x] 4 then return Tree-Search(left[x], k) 5 else return Tree-Search(right[x], k) Primjer.. Na danom stablu T pronađite čvor sa vrijednošću 13. 3 7 2 4 13 Rješenje. Algoritam rekurzivno definira put do čvora y za kojeg je key[y] = k. Zadatak.1. Napišite iterativnu pretragu stablom umjesto rekurzijom. Primjer.7. Napišite operacije Minimum odnosno Maximum koja će nalaziti u podstablu T x čvor s minimalnom odnosno maksimalnom vrijednošću ključa. Rješenje. Tree-Minimum(x) 1 while left[x] = nil 2 do x left[x] 3 return x Tree-Maximum(x) 1 while right[x] = nil 2 do x right[x] 3 return x

2 Stabla Nalaženje prethodnika i sljedbenika Za dani čvor x u binarnom poredanom stablu T, ponekad je važno moći naći njegovog sljedbenika u sortiranom redosljedu ključeva na temelju inorder obilaska stabla. Ukoliko su svi ključevi različiti, sljedbenik (engl. successor) je čvor s najmanjom vrijednošću ključa veće nego key[x]. Sljedeća procedura nalazi u O(h) vremenu sljedbenika čvora x ukoliko postoji ili nil ukoliko ne postoji. Tree-Successor(x) 1 if right[x] = nil 2 then return Tree-Minimum(right[x]) 3 y p[x] 4 while y = nil and x = right[y] 5 do x y y p[y] 7 return y Nadopuni sliku. Primjer.8. Odredite sljedbenike čvorova x, y s ključevima key[x] = i key[y] = 13 na stablu 3 7 2 4 13 Rješenje. Sljedbenike nalazimo pozivom Tree-Successor(x) = x 1, key[x 1 ] = 17, Tree-Successor(y) = y 1, key[y 1 ] =. Zadatak.2. Pretpostavimo da imamo brojeve između između 1 i 1000 u BST i želimo tražiti broj 33. Koji od sljedećih nizova čvorova ne može biti valjana pretraga? a) 2, 254, 401, 38, 330, 344, 37, 33. b) 24, 220, 11, 244, 88, 258, 32, 33 c) 25, 202, 11, 240, 12, 245, 33 Rješenje. U zadacima (a),(b) imamo valjanu pretragu, dok u (c) na putu 11, 240, 12 narušavamo uređaj stabla. Primjer.. Napišite proceduru u O(h) vremenu koja će za dani čvor x u BST T pronaći njegovog pretka. Visina stabla je h.

.3. Binarno poredano stablo 3 Rješenje. Algoritam za nalaženje prethodnika nekog čvora x u BST T: Tree-Predacessor(x) 1 if left[x] = nil 2 then return Tree-Maximum(right[x]) 3 y p[x] 4 while y = Nil and x = left[y] 5 do x y y p[y] 7 return y U najgorem slučaju, algoritam mora preći put u stablu od lista do korijena što odgovara visini stabla h implicirajući O(h) vremensku složenost. Dodavanje i brisanje elemenata binarnog poredanog stabla U binarnom poredanom stablu T želimo dodati novi čvor na takav način da nakon dodavanja sačuvamo uređaj u tom stablu. Algoritam Tree-Insert uzima za parametar čvor z i dodaje ga u T na odgovarajuće mjesto. Postupak je izražen pseudokodom Tree-Insert(T, z) 1 y nil 2 x root[t] 3 while x = nil 4 do y x 5 if key[z] < key[x] then x left[x] 7 else x right[x] 8 π[z] y if y = nil 10 then root[t] z 11 else if key[z] < key[y] 12 then left[y] z 13 else right[y] z Primjetite da vremenska složenost algoritma ovisi o visini stabla što je O(h). Primjer.10. Stablu T iz Primjera.8 dodajte čvorove s ključevima 1, 14. Rješenje. Kako bi dodali čvor, recimo z 1, s ključem 1 po danom algoritmu, trebamo se spustiti do čvora s ključem 2 i postaviti z 1 da bude lijevo dijete. Čvor z 2 s ključem 14 dodajemo čvoru s ključem 13 kao desno dijete. Na slici je prikazano stablo T s novododanim čvorovima.

4 Stabla 1 3 7 2 4 13 1 14 Sljedeći algoritam u O(h) vremenu briše i vraća iz binarnog poredanog stabla T čvor z T. Tree-Delete(T, z) 1 if left[z] = nil or right[z] = nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] = nil 5 then x left[y] else x right[y] 7 if x = nil 8 then π[x] π[y] if π[y] = nil 10 then root[t] x 11 else if y = left[π[y]] 12 then left[π[y]] x 13 else right[π[y]] x 14 if y = z then key[z] key[y] 1 return y Primjer.11. Obrišite iz stabla T zadanog u Primjeru.8 čvorove s ključevima 7,. Rješenje. Postupak brisanja čvora iz stabla T je prikazano na slici

.3. Binarno poredano stablo 5 3 7 1 3 7 y z π(x) 1 2 4 13 2 4 13 x z 1 1 π(x) 3 13 3 13 y 2 4 2 4 x Primjećujemo iz algoritma brisanja da poziv Tree-Successor predstavlja najkritičniji poziv. Svi ostali koraci su zamjene pokazivača pretka ili nasljednika od čvora kojeg želimo brisati. Dakle, vrijeme potrebno za brisanje je asimptotski O(h).