You are on page 1of 12

Povezano binarno stablo:

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.

Crno crveno stablo

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:

Riječ je o samo-uravnotežujućem binarnom stablu traženja sa dodatnim obilježjem da se nedavno


pristupanim elementima može brzo ponovno pristupati. Ideja na kojoj počiva preslagujuće stablo je da
ako se pojedinom elementu pristupa, vjerojatno će mu se ponovno pristupati. U preslagujućem stablu,
operacije umetanja, pretraživanja i brisanja se kombiniraju sa operacijom koja se naziva preslagivanje.
Preslagivanje stabla za pojedini čvor predstavlja premještanje stabla kako bi se taj čvor smjestio u
korijen stabla. 

Operacije: Ovo bi bilo dobro i nacrtati


Zig: stablo se rotira na bridu između čvora i roditelja. Obična rotacija

Zig-zig korak: rotiramo roditelja oko djeda i onda rotiramo cvor oko roditelja

Zig Zag:  Rotiramo covor  na roditelja i onda cvor oko djeda.

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:

Umetanje nove vrijednosti u pripadajuću skupinu podatkovnih vrijednosti.  U slučaju da dodana


vrijednost prelazi M-1 broj vrijednost vrši se odvajanje gdje čvor sa vrijednošću medijana prelazi na
razinu roditelja. 

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:

Umetni novi čvor kao list. 


Ukoliko dođe do prekoračenja kapaciteta lista, razdijeli čvor i kopiraj srednju vrijednost u sljedeći
indeksni čvor.
 Ukoliko dođe do prekoračenja kapaciteta (eng. overflow) indeksnog čvora, razdijeli taj čvor i pomakni
srednju vrijednost na sljedeću indeksnu razinu.
Koraci brisanja:

• Obriši ključ i podatke iz listova. 


• Ako list postane prazan, spoji taj čvor sa njegovim bratom i obriši ključ između njih. 
• Ako indeksni čvor postane prazan, spoji taj čvor sa njegovim bratom i ključ između njih premjesti
dolje.

Trie

Pohranjuje ključeve koji su obično stringovi. 


Riječ je o 𝑘-arnom stablu položaja (eng. position tree). 
Za razliku od BST, čvorovi u trie ne pohranjuju ključeve koji su sa njima povezani. 
Umjesto toga, položaj čvora u stablu predstavlja ključ povezanosti sa tim čvorom. 
Svi potomci čvora imaju zajednički prefiks stringa povezan sa tim čvorom dok je korijen povezan sa
praznim stringom. Prednosti su brže pretraživanje, manje zauzimanje prostora i podudaranje najduljeg
prefiksa, nema kolizije ključeva kao što se to može dogoditi u hash tablici.

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. 

Kreiranje nove binomne hrpa:


Procedura kreiraj_binomnu_hrpu() alocira i vraća objekt H, dok je Glava[H] postavljena na NULL.
Vrijeme izvođenja procedure je O(1).

Pronalaženje čvora s najmanjom vrijednosti:

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

Ujedinjenje dviju hrpa:

Ako imamo hrpu H1 i H2 prvi korak je pozivanje procedure povezi_binomna-stabla() koristimo za


spajanje listi korijena H1 i H2 u jednostruku vezanu listu. Spoji_binomnu-hrpu() vraća listu korijena H
koja je sortirana prema monotono rastućem stupnju. Vrši se provjera da li postoji barem jedan korijen
te u slučaju da postoji algoritam se nastavlja. Kreiraju se tri pokazivača PREV, PTR i NEXT (ne moram
pisati sta oni znace). Zatim iteracijom provjeravamo da li će se PTR i NEXT povezati ovino o njihovim
stupnjevima. Ako su njihovi stupnjevi različiti PREV postaje PTR, PTR postaje NEXT te nastavljamo
sa usporedbama. U slučaju da imaju isti stupanj povezujemo PTR i NEXT tako da onaj sa manjom
vrijednošću postaje korijen. Vrijeme izvođena O(log n).

Umetanje novog čvora:

Procedura Umetanje_Binomna-Hrpa() koristi se za umetanje čvora x u binomnu hrpu H. X mora biti


prethodno alociran te mora sadržati neku virjednost.  Ovaj algoritam radi u vremenu od O(1)

Izdvajanje minimalnog čvora:

Procedura Izdvoji_Min_Bionomna-Hrpa prihvaća hrpu H kao parameta i vraća pokazivač na izdvojeni


čvor. Pronalazi se korijen R koji ima najmanju vrijednost u listi korijena od H. Uklanja se R iz liste te se
kreira nova hrpa od djece R-a koja stvara vezanu listu. Glava[H] se postavlja na glavu rastuće liste te
se vrši ujedinjenje.

Umanjenje vrijednosti u čvoru:


Ako je nova vrijednost manja od zadane izlazimo it algoritma u protivnom vrši se izmjena vrijednosti.
Postavljaju se dva pokazivača PTR= x i PAR = Parent[PTR] te se vrši zamjena dok god PAR nije null
ili vrijednost PAR nije nije manja od vrijednosti PTR-a. Nakon zamjene potrebno PRT postaviti na PAR
a PAR na Parent[PTR].

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:

Fibonaccijeva hrpa omogućuje da se operacije koje ne uključuju brisanje čvora izvode u


amortiziranom vremenu O(1). Fib se koristi kad je broj operacija izdvajanje čvora sa najmanjom
vrijednošću i brisanja čvora malen u odnosu na ostale operacije. Zbog programske složenosti Fib se
ne smatra atraktivnim za korištenje ali ima fleksibilnu strukturu koja ima bolje asimptotske vremenske
granice od binomne. Bin hrpa posjeduje uređena stabla dok Fib posjeduje ukorijenjea i neuređena.
Svaki čvor u fib sadrži pokazivače na roditelja i bilo kojeg djeteta. Svako djete sadrži pokazivač na
lijevog i desnog brata a kad ne postoji brat pokazuje sama na sebe. Fibu se pristupa preko pokazivača
min[H] koji pokazuje na korijen koji sadrži najmanju vrijednost.

Umetanje novog čvora:

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.

Ujedinjavanje dvije fibonaccijeve hrpe:

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.

Izdvajanje čvora sa najmanjom vrijednošću:


Najprije se stvara korijen od svakog djeteta od čvora sa minimalnom vrijednošću te se isti nakon toga
uklanja iz liste korijena od H. Vrši se konsolidacije H liste kostijena na način da se povežu korijeni
istog stupnja sve dok ostane najviše jedan korijen istog stupnja. Ako je X null tada je hrpa već prazna
inače se briše čvor x iz H na način da sva njegova djeca postaju korijeni od H nakon čega se X može
ukloniti. Ako je X desni čvor tada je on bio jedini čvor te je H prazan u protivnom min[H] se postavlja
na adresu desnog polja od 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.

Umanjivanje vrijednosti čvora

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

P problemi definiraju se kao problemi za koje je moguće definirati deterministički Turingov


stroj koji rješenje nalazi u polinomnom vremenu, što znači da postoji neki polinom p(X) takav
da je broj koraka turingovog stroja uvijek manji od p(X), gdje je X duljina ulaznih podataka
zapisanih na traci Turingovog stroja.

Algoritam „Isprobaj sve mogućnosti”


-    jedan način sortiranja brojeva gdje će pronaći sve moguće redoslijed tih brojeva i za
svakog provjeriti je li dobar. Izvodi se polinomno ali posto je polinom prvog stupnja onda se
izvodi linearno i ima n! mogućnosti.
Algoritam „usporedi svaka dva” 
uspoređuje parove brojeva i ako su u pogrešnom redoslijedu onda iz zamijeni. 
To je selection sort, jednostavan je za implementaciju ali je spor i izvršava se u p(n) vremenu.

Np potpuni problemi

NP problemi su oni problemi za koje je moguće definirati nedertminističke Turingove strojeve


koji ih rješavaju u polinomnom vremenu.
Kažemo da je problem NP-potpun ako zadovoljava sljedeća dva uvjeta: 
1. ako je klase NP (tj. ako se za svako ponudeno rješenje može u polinomnom vremenu
provjeriti rješava li problem)
2. ako rješavanjem tog problema u polinomnom vremenu možemo i sve ostale NP-probleme
riješiti u polinomnom vremenu.

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 razapinjuće stablo

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.

Težina stabla T (V,E) je suma težina njegovih bridova tj w(T) = Σe€Tw(e).

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 (bilo na ispitu)

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.

Usmjereni težinski graf

Implementacije usmjerenog težinskog grafa izvode se iz implementacija neusmjerenog težinskog


grafa tako da se dozvoli da matrica susjednosti prezentirana dvodimenzionalnim poljem ili listama,
bude nesimetrična.

You might also like