Professional Documents
Culture Documents
Nasp Usmeni Cijeli
Nasp Usmeni Cijeli
Temeljna razlika između binarnog stabla i povezanih binarnog stabla je da u binarnom stablu čvor koji
nema djece pohranjuje NULL pokazivače zbog čega obilazak stabla unazad nije moguć. PBS može
biti sa jednosmjerno ili dvosmjernim povezivanjem. Lijeva poveznica uvijek pokazuje na in order
prethodnika dok desna pokazuje na in order sljedbenik. Dvosmjerno stablo sadrži obe poveznice te se
radi toga jos i naziva potpuno povezano binarno stablo.
Prednosti: Omogućuje linearni obilazak elemenata u stablu te samim time potrebnu za korištenjem
stoga. Omogućuje pronalaženje roditelja odabranog čvora bez eksplicitnog korištenja pokazivača na
roditelja. Omogućuje inorder obilazak unaprijed i unazad
AVL Stablo:
Stablo u kojem se visina dva podstabla promatranog čvora može razlikovati za najviše 1. Zbog toga
joše se naziva stablo uravnoteženo po visini. Prednost AVL stabla je ta što u prosječnom i najgorem
slučaju je potrebno O(log n) vremena za operacije umetanja, brisanja i pretraživanja. Struktura stabla
je jednaka BST gdje je jedina razlika dodatna varijabla u AVL stablu pod nazivom čimbenik koja se
brine o uravnoteženosti stabla
Čimbenik = visina lijevog podstabla - visina desnog podstabla
Nakon svakog dodavanja ili brisanja potrebno je ponovno uravnotežiti stablo u slučaju da je to
potrebno. Proces uravnoteživanja stabla se naziva rotacija. Postoje 4 osnovne vrste rotacije.
• LL (eng. LL) rotacija - novi čvor je umetnut u lijevo podstablo lijevog podstabla kritičnog čvora. • DD
(eng. RR) rotacija - novi čvor je umetnut u desno podstablo desnog podstabla kritičnog čvora • LD
(eng. LR) rotacija - novi čvor je umetnut u desno podstablo lijevog podstabla kritičnog čvora • DL (eng.
RL) rotacija - novi čvor je umetnut u lijevo podstablo desnog podstabla kritičnog čvora.
Crveno-crno stablo je binarno stablo traženja u kojem se operacije umetanja i brisanja izvode na
inteligentan način pri čemu stablo ostaje umjereno uravnoteženo.U crveno-crnom stablu se podaci ne
pohranjuju u listove. Crveno-crno stablo je binarno stablo traženja u kojem svaki čvor ima boju koja je
ili crvena ili crna.
Pored ograničenja karakterističnih za binarna stabla traženja, crveno-crna stabla imaju sljedeća
dodatna obilježja:
1. Čvor može biti crven ili crn.
2. Korijen je uvijek crn.
3. Svi listovi su crni.
4. Djeca crvenog čvora su crna.
5. Svaki jednostavan put od promatranog čvora do bilo kojeg od njegovih listova ima jednak broj crnih
čvorova.
Brisanje:
Ako brišemo čvor koji je crven, onda ga jednostavno zamijenimo sa njegovim djetetom koje mora biti
crno. Svi putevi kroz obrisani čvor će prolaziti kroz jedan crveni čvor manje, a kako dijete i roditelj
obrisanog čvora moraju biti crni, nijedno obilježje nije narušeno.
U slučaju kada brišemo crni čvor koji ima crveno dijete, četvrto i peto obilježje mogu biti narušeni.
Kako bi se spomenuta obilježja ponovno uspostavila, potrebno je dijete obrisanog čvora obojiti u crno.
Preslagajuće stablo:
Zig-zig korak: rotiramo roditelja oko djeda i onda rotiramo cvor oko roditelja
B stablo:
B stablo spada pod višesmjerna stabla traženja. višesmjerna stabla traženja u svakom čvoru imaju M
− 1 vrijednosti i M podstabala. Omogućuje nam pohranjivanje velikog broja podatkovnih vrijednosti u
jedan čvor što čini visinu stabla relativno malom. B stablo je dizajnirano za pohranu sortiranih
podataka te omogućuje da se operacije pretraživanja, umetanja i brisanja izvršavaju u logaritamskom
amortiziranom vremenu.
Umetanje:
Brisanja:
Da bi se obrisao unutarnji čvor, potrebno je prethodnika ili sljedbenika podatkovne vrijednosti koja se
briše promovirati kako bi zauzeo poziciju obrisane podatkovne vrijednosti.
Prilikom brisanja moramo paziti da ne minimalan broj podatkovnih vrijednost bude zadovoljen. U
slučaju da uvjeti nisu zadovoljeni spuštamo vrijednosti iz roditelja te smanjujemo visinu stabla.
B+ tree:
Varijanta B stabla koja pohranjuje sortirane podatke na način koji omogućuje učinkovito umetanje,
dohvaćanje i uklanjanje zapisa od kojih je svaki identificiran ključem.
Dok se kod B stabla ključevi i zapisi mogu pohraniti u unutarnjim čvorovima, kod B+ stabla se zapisi
pohranjuju na razini listova dok se na razini unutarnjih čvorova pohranjuju samo ključevi.
Listovi B+ stabla predstavljaju linearnu strukturu vezane liste što olakšava postavljanje upita te
povećava učinkovitost njihova izvođenja.
Koraci umetanja:
Trie
Binomna hrpa:
Je skup binomnih stabala koji zadovoljavaju svojstva minimalne hrpe te svaki red ukljućujući i nulti
može posjedovati nula ili jedno binomno stablo. Stoga binomna hrpa sadrži najviše N+ 1 binomnih
stabala.
Binomna hrpa je uređena ko hrpa što znači da će čvor sa najmanjom vrijednosti u određenom
binomnom stablu biti korijen binomne hrpe. Procedura Min_Binomna-Hrpa() provjerava sve korijene i
vraća najmanji. Vrijeme izvođenja procedure je O(log n).
Brisanje čvorova:
Prvo vršimo opreaciju umanjenja vrijednosti gdje čvoru x na - beskonacno. Zatim funkcijom izdvajanja
izdvajamo minimalnu vrijednost te vršimo brisanje.
Fibonaccijeva hrpa:
Inicijalizira se struktura polja čvora X čime se stvara jnegova mlastita cirkularna vezana lista Left[x] = x
i Right[x] = x. Zatim se X dodaje u H u 0(1) čime x postaje neuređeno binomno stablo u Fib hrpi.
Provjerava se da li je vrijednost X manja od min[H] te u slučaju da je vrši se zamjena. Na kraju se broj
čvorova u H povećaje za jedan.
Vrši se spajanje liste korijena H1 i H2 u novu listu korijena H. Zatim se čvor sa najmanjom vrijednosti
postavi u H te se ažurira broj čvorova u H. Oslobađa se memorija od H1 i H2 te se kao rezultat vraća
H.
Konsolidacija hrpe:
Provodi se da bi se smanjila veličina hrpe. Pronalaze se dva korijena koja imaju isti stupanj u kojem je
vrijednost x manja ili jednaka od y . Poveži ih tako da y ukloniš te ga učiniš djetetom od X.
Povećavamo stupanj X te ako postoji oznaka na Y ona se briše. Postupak se izvodi dok svi korijeni u
listi nemaju različit stupanj.
Vrši se provjera vrijednost koju želimo postaviti čvoru v. Ako je veća od zadane izlazimo iz programa i
vračamo grešku, inače mijenjamo vrijednost čvora. Postavljamo novi pokazivač na PTR = v i PAR na
roditelja od PTR. Iteriramo sve dok je roditelj različit od nul vrijednosti i dok je roditelj veći od vrijednost
od v te se pozivaju se funkcije odvajanje i kaskadnog odvajanja. Na kraju se provjerava da li je min[H]
veći od Val[PTR] te ako je min[H] = PTR.
P potupni problemi
Np potpuni problemi
Color
Vrhovi povezani bridom moraju imati različite boje.
Ulaz: graf 𝐺 i prirodni broj 𝑘.
Pitanje: da li se vrhovi od 𝐺 mogu obojiti s najviše 𝑘 boja?
Clique
Klika je skup vrhova od kojih je svaki sa svakim povezan bridom
Ulaz: graf 𝐺 i prirodni broj 𝑘.
Pitanje: da li u 𝐺 postoji klika veličine barem 𝑘?
Domination
Skup vrhova 𝐷 je dominirajući ako je svaki od preostalih vrhova povezan bridom s barem jednim iz 𝐷.
Ulaz: graf 𝐺 i prirodni broj 𝑘.
Pitanje: da li u 𝐺 postoji dominirajući skup od najviše 𝑘 vrhova?
Vertex_Cover
Skup vrhova 𝑉 je vršni pokrivač ako svaki brid u grafu ima barem jedan kraj u 𝑉.
Ulaz: graf 𝐺 i prirodni broj 𝑘.
Pitanje: da li u 𝐺 postoji vršni pokrivač veličine najviše 𝑘?
NEUSMJERENI GRAFOVI
Minimalno razapinjujeće stablo je skup bridova koji povezuju sve vrhove skupa bez ponavljanja i sa
najmanjom mogućom težinom odnosno zbroj svih težina bridova je najmanji mogući. Postoji puno
primjena MRS-a te ga koriste telekomunikacijske kompanije kako bi odredile način postavljanja
vodova unutar novih ulica.
Kruskalov algoritam
Temelji se na metodi pohlepe, kreće od situacije u kojoj svaki vrh grafa čini zasebni skup vrhova. U
svakom se korako povezuju dva skupa vrhova za koje se to može učiniti uz najmanju cijenu. Algoritam
završava kada se svi vrhovi grafa nalaze u istom skupu. Uvijek se uzima brid najmanje težine koji
povezuje dva skupa vrhova, definira se lista bridova koja je sortirana uzlazno. U listu osim vrhova koje
brid povezuje stavlja se i težina kako bi se na tu listu kako bi se održala sortiranost. Iz liste bridova
uzimaju se bridovi, potom se svaki brid provjerava povezuje li on dva vrha iz različitih skupova i ako
povezuje dodaje se ga u stablo i od dva dotična skupa napraviti jedan.
Primov
-temelji se na metodi pohlepe, vrhovi su podijeljeni na dva skupa i traži se najmanji brid na granici tih
dvaju skupova. Umjesto da konstruira podgraf brid po brid, Primov konstruira vrh po vrh (bizaro
Kruskalov). Početni vrh se bira proizvoljno i odmah postaje dio grafa.
Primovo stablo raste tako da mu se dodaje vrh za koji vrijedi da je njegova udaljenost od nekog vrha iz
Prim stabla manja nego udaljenost nekog drugog vrha iz istog prim stabla. Postupak se iterativno
nastavlja dok nema više slobodnih vrhova, tj svi vrhovi su uključeni u graf.
DFS
specijalni slučaj opće metode rasta stabla, počinje se u danom vrhu v i traženo stablo T se sastoji
samo od početnog vrha. U koraku indukcije uzima se da je x novi vrh u stablu T, ako je y susjedni vrh
od x a da ne pripada stablu T onda ga se uključuje u stablo. Postupak se ponavlja kod pretraživanja
njegovih susjeda. Ako nema novih susjeda vraća se natrag na vrh x i traže se njegovi susjedi koji nisu
uključeni u stablo T. Kada se tim putem vratimo u vrh v (backtracking)postupak je završen i traženo
stablo je konstruirano. Treba se izbjegavati cikluse.Da bi se izbjeglo da algoritam završi u beskonačnoj
petlji, potreno je pamtiti vrhove kroz koje je prođeno kako se ne bi vraćali u njih.
DFS se izvodi unutar klase i izravno djeluje na samoj strukturi podataka. Polje predstavlja skup
nepretraženih vrhova, a stog služi da prati pretraživanje grafa i omogućuje vraćanje po potrebi.
Polje nepretraženih vrhova možemo izvesi i sa listom. S time se poboljšava traženje sljedećeg
nepretraženog vrha ali kvari se operacija određivanja je li određeni vrh već pretražen ili nije.
Stog pamti sve prijeđene vrhove, a čija djeca još nisu pretražena. Ako dođe do vrha iz kojeg se dalje
ne može pretraživati izvodi se vraćanje na prethodni vrh. Složenost: • 𝑇𝑚𝑎𝑥𝐷𝐹𝑆(𝑛) = 𝑂(𝑛)
BFS
pretražuje po razinama, promatra se kao metoda traženja razapinjućeg stabla i kao metoda
pretraživanja. Kreće se od jednog vrha, nakon čega se zahvaćuju njegovi susjedi i idući susjedi itd do
kraja vremena i postojanja.
Polje za čuvanje informacija o nepretraženim vrhovima i red za čuvanje informacija potrebnih metodi
pretraživanja s vraćanjem. (koristi polja kao i DFS).
Sam je algoritam vrlo sličan pretraživanju prvo u dubinu, samo što se koristi red i element se ispisuje
kada se briše iz reda, a ne kada se dodaje, kao kod stoga. • Složenost: • 𝑇𝑚𝑎𝑥𝐵𝐹𝑆(𝑛) = 𝑂(𝑛)
DFS je efikasniji kada traba naći samo neko od mogućih rješenja, a BFS je bolji kod problema
optimizacije tj kada treba pronaći rješenje na najmanjem nivou stabla.
Izomorfizam grafova
Ako su dva grafa izomorfna znači da oni imaju jednak broj vrhova, bridova, nizove stupnjeva i još
dodatna svojstva. Obratno ne vrijedi
Ako dva grafa imaju jednak broj vrhova, bridova, nizove stupnjeva i broj komponenata povezanosti ne
znači da su izomorfni, ali sa obratom suprotne tvrdnje kaže da ako dva grafa imaju različiti broj vrhova
onda nisu izomorfni.
Euler
Neusmjereni graf ima Eulerovu turu ako i samo ako je povezan i svaki vrh je parnog stupnja
Neusmjeren graf sadrži Eulerovu stazu ako i samo ako je povezan i ako su svi, osim dva vrha, parnog
stupnja. Graf G je Eulerov graf ako i samo ako je G povezan i ako su svi vrhovi G parnog stupnja.
Ukratko ovdje gledamo pređene bridove s time da prelazimo, dok kod Hamiltona gledamo pređene
vrhove.
Hamiltonovi ciklusi
Za razliku od Eulerovog grafa, jošje uvijek otvoreni problem karakterizacije Hamiltonovog grafa, tj.
nalaženja nužnog i dovoljnog uvjeta da (netrivijalni) graf bude Hamiltonov,m ako je graf Eulerov isti ne
može i ne mora biti Hamiltonov, vrijedi i obrnuto. Jer da bi bio hamiltonov ili eulerov graf mora biti
povezan.
Usmjereni grafovi
Ako kod bilo kojeg grafa, svakom bridu damo orijentaciju radimo usmjereni graf, obratno ne vrijedi.
Bridovi su uređeni parovi vrhova. Refleksivnost se oičituje tako da svaki vrh ima petlju (može i vrh
pokazivati sam na sebe). Kod usmjerenog matematičkog grafa mogu se koristiti iste strukture kao i
kod neusmjerenog grafa.
Turnir
Primjer turnira gdje svaki igrač igra protiv svakog, to je potpuni graf koji je pretvoren u usmjereni graf.
Mogu se javiti usmjereni ciklusi duljine >= 3, ali ne i ciklusi duljine <3. Na svakom turniru ima neparan
broj Hamiltonovih putova.
Topološko sortiranje kreće od određenog vrha i ide u neko njegovo dijete, slijedeći put sve dok ne
dođe do vrha iz kojeg više ne može nikamo, i onda provodi backtracking.Topološko sortiranje je
moguće ako i samo ako je graf acikličan. Primjeri algoritma: Kanov, DFS i Paralelni algoritam.