User:Simonami41213/sandbox

U racunarstvu skapegoat tree (ili zrtveni jaracs stablo) je binarnog stabla pretrage otkriveno,od strane Arne Andersson, a posle ponovo  Igal Galperin i Ronald L. Rivest. Osigurava najgou slozenost od O(log n) za pretrazivanje i амортизованом време уметање и брисање od samo O(log n).

Za razliku od vecinje samo balansirajucih binarnih stabala koji obezbediti najgore vreme od O(log n ) za pronalaženje, ovaj tip nema dodatnu memoriju za pre-cvorove, kao kod drugih stabla za pretrazivanje. U cvou se cuva samo kluc i dva pokazivaca, na sinove. Cime se ostvaruje usteda memorijskog prostora do cak 1/3. Ova strukture cine zrveni jarac lakse za implemenetaciju.

Sadrzaj [hide] 1 Teorija 2 Operatije 2.1 Umetanje 2.1.1 Skica dokaza za troškove umetanja 2.2 Brisanje 2.2.1 Skica dokaza za troškove brisanja 2.3 Pretrazivanje 3 Bidi takodje 4 Reference 5 Spoljni linkovi

Teorija

Binarno stablo pretrage se kaže da je tezinski uravnotežen ako polovina čvorova su na levoj strani korena, a polovina na desnoj. α-težina-izbalansiran se stoga definiše kao ispunjavanje sledećih uslova:

size(left) <= α*size(node) size(right) <= α*size(node) -- velicina (levo) <= α*velicina (cvora) velicina (desno) <= α*velicina (cvora)

Gde se velicina mose defenisati rekurzivno kao:

function size(node) if node = nil return 0 else return size(node->left) + size(node->right) + 1 end

Gde bi α jednako bi opsivalo da je povezani list balansiran, gde bi o,5 odgovoralo skoro popunjenim binarnim stablima. Za balansirano stablo pretrage koje je α-tezinski-balansirano mora da bude i α-visinski balansirano.

height(tree) <= log1/α(NodeCount)

Zrtveni jarac nisu garanti da odrzavaju α-tezinski-balansiranje ali su uvek otprilike α-visinski balansirana.

height(scapegoat tree) <= log1/α(NodeCount) + 1

Ovo zine zrtveni jarac stablo slicnim crveno-crnim stablima u tome da su oboje ograniceni s visinom. Oni se u najvisoj meri razlikuju u implementaciji odlucivanja gde ce izvrsiti rotacia (ili rebalasiranje u slucaju zrvenog jarca). Gde crveno-crna stabla dodaju ekstra informaciju u obliku 'boje' da defenise lokacija, zrveni jarac nalazi zrvenog jarca gde nije α-tezinski-balansiran da izvrsi rebalansirajuce operacije. Ovo je blisko sa AVL stablima, u tome da aktuelna rotacija zavisi od 'balansa' cvorova, ali determinacija balansa se deasticno razlikuje.Pošto AVL stabla proverite stanje vrednosti na svakom ubacivanja / brisanje, tipicno je podatak cuvan u svakom cvoru; žrtveni-jarac-stabla su u stanju da ga izračunamo samo po potrebi, što je samo kada treba žrtveni jarac da se pronađe. Za razliku od vecinje samo balansirajucih stabla,žrtveni jarac stabla su u potpunosti fleksibilni kod njihovog balansiranja.Oni podržavaju bilo kakvu α taj što su 0,5 < α < 1. α visoke vrednosti ima kao rezultat manje balansiranja,čineći ubacivanje brže nego pretrrazivanje i brisanja koji budu sporiji, i obrnoto za α koje uzima malu vrednost. U prakticnoj primeni α moze da se izabere prema tome kakve su frekvencije odgovarajucih operacija.

--- Operacije

Ubacivanje

Ubacivanje se realizuje sa istim osnovnim idejama kao neuravnotežene binarnom stablu pretrage, međutim uz nekoliko značajnih promena. Kada pronadje zeljenja tačku umetanja ,dubina novog čvora mora biti zabeležen. Ovo se realizuje putem jednostavnog brojaca koji se uvećava tokom svake iteracije dok se ne pronadje,efikasno broji grane između korena i čvora koji se ubacije. Ako ovaj čvor krši α-visina-bilansnu svojstvo (definisan gore), potrebna je rebalans. Za rebalans celo pod stablo ispod cvora zrvenog jarca ulazi u balansiranje. Žrtveni jarac je definisana kao predak od ubačenog čvora koji nije α-težina-uravnotežen. Uvek ce biti bar jedan takav predak.Rebalans bilo koji od njih će obnoviti α-visina-uravnoteženo svojstvo.

Jedan nacin pronalazanje zrtvenog jarca, je da se penjemo od ubacenog cvora natrag do korena stabla, i obelezeti prvi cvor koji nije α-težina-uravnotežen.

Penjane natrag do korena zahteva O(log n) memorijski prostor, obisno alociran na steku ili roditeljske pokazivace. Ovo se zapravo može izbeći ukazujući svakom detetu na svom roditelju kako idete dole, a popraviti u povratku nazad.

da bi utvrdili da li je cvor povoljan kao zrtveni jarac moze da se vratimo na defeniciju: size(left) <= α*size(node) size(right) <= α*size(node)

Velika optimizacija se moze izvrsiti kad se utvrdi da mi vec u susti ni imamo dve od 3 trazene velicine i moramo da racunamo samo poslednju. Razmotranjem sledećeg primera cemo da demonstriramo ovo. Pod pretpostavkom da se penjemo nazad do korena.

size(parent) = size(node) + size(sibling) + 1

ali kako:

size(inserted node) = 1.

Slicaj postaje trivialan:

size[x+1] = size[x] + size(sibling) + 1

Gde je x = cvor, a x+1 roditelj i jedini poziv koji nam je potreban je poziv size(brata).

Jednom kad je zrtveno jare nadjeno, pod stablo zakaceno na zrtvenog jarca je iznova kreirano da bude balansirano. Ovo se moze uraditi za O(n) vremena, tako sto cemo da predjemo preko svih cvorova podstabla, da bi ustanovili njihove vrednostiu sortiranom poretku, i rekruzivno biramo medijanu kao koren podstabla.

Posto rebalansi uzimaju vremensku slozenost od O(n) za najgoru situaciju to je ujedno i vremenska slozenost, ali posto su najgori slucajevi retki amortizovana vremenska slozenost ce biti O(log n).

Skica dokaza za troškove umetanja

Nebalansiranost cvora v je apsolutna vrednost razlika u veličini između njegovog levog i desnog čvora minus 1 ili 0, koje god je veće. Drugim rečima:

https://upload.wikimedia.org/math/0/7/d/07dac7ef0c285dcd4e0387f0031d3ea2.png

Odmah posle izgradnje pod stabla v, l(v)=0.

Lema: pre izgradnje pod stabla cvora v: https://upload.wikimedia.org/math/7/e/9/7e946d206d3ba826a7d9ac69780bf3b0.png

Dokaz leme:

Neka je v0 koren odmah posle kreiranja https://upload.wikimedia.org/math/4/3/9/439bc5376a96304b2924b5c3275f6553.png Ako je https://upload.wikimedia.org/math/b/e/d/bed436f6a2241892cb8e3f89986340e6.png degenerisani umetanja (to jest, gde je svaki ubačenog povećava visinu 1), zatim

https://upload.wikimedia.org/math/0/9/1/091512557baa5b5ff436fca9f20f1e4c.png https://upload.wikimedia.org/math/b/c/b/bcbfbfdc5bd028ea5e95f98d96a38963.png i https://upload.wikimedia.org/math/0/b/f/0bf005121c3c5eee7bed1b2a3c5153b2.png Posto je https://upload.wikimedia.org/math/0/2/e/02e8c3247323304f12838b90ee542f74.png pre ponovnog pravljenja https://upload.wikimedia.org/math/6/4/e/64e11018bb50743211ccbc7e356625be.png insercije u podstablu sa korenom u V koja nije dovela u obnovi. Svaki od ovih umetanja se mogu izvesti u O (log n). Konačna umetanje koja izaziva troškove https://upload.wikimedia.org/math/d/c/7/dc7281dd7498df2562e5b94c0291365a.png Korišćenje ukupnu analize postaje jasno da amortizuju troškovi umetak je https://upload.wikimedia.org/math/6/0/d/60d4554fc1d20efd2fe270a75f50433e.png

https://upload.wikimedia.org/math/0/1/5/015443c8037bc83e1ee6aa9ae56d5367.png

- Brisanje

Zrtveni jarac stabla su neobicna po tome sto je brisanje lakse nego ubacivanje. Da biste omogućili brisanje, žrtveni jarac stabla je potrebno da se sačuva dodatna vrednost sa strukturom podataka stabla. Ovo svojstvo, koju ćemo zvati MaxNodeCount jednostavno predstavlja najvišu postignutu NodeCount. Postavljen je za NodeCount kad god se rebalansira celo stablo, a nakon ubacivanja postavljen je na max (MaxNodeCount, NodeCount).Da bi se izvršilo brisanje, mi jednostavno uklonimo čvor kao što bi u jednostavnom binarnom stablu pretrage, ali ako NodeCount <= α*MaxNodeCount

onda ćemo rebalans celo stablo oko korena, sećajući da postavimo MaxNodeCount na NodeCount. Ovo daje brisanje za svoj najgori mogući učinak O (n), ali se amortizuje za O (log n) prosečno vreme. ---

Skica dokaza za troškove brisanja

Pretpostavimo a zrtveni jarac stablo ima n elemenata i upravo je bilo ponovo kreirano, (drugim recima kompletno binarno stablo je). Najvise n/2-1 brisanja se moze obaviti pre nego sto se stablo mora nanovo kreirati. Svako ovo brisanje kosta O(log n) vremena,(vreme da se nadje elemant i obelezi) posle n/2 puta ce izazvati da se stablo ponovo izgradi. https://upload.wikimedia.org/math/5/d/f/5df591ad865229b18a8e4981e974ca33.png Korišćenje ukupnu analize postaje jasno da troškove otplate brisanje je O(log n) https://upload.wikimedia.org/math/b/a/9/ba961fa43a605df364e4e9a55e33e3e6.png

Prevedeno sa https://en.wikipedia.org/wiki/Scapegoat_tree