Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Linearno ispitivanje Za datu običnu heš funkciju h : U {0, 1,... m 1} kojoj se obraćamo kao pomoćnoj heš funkciji metod linearnog ispitivanja koristi heš funkciju h(k, i) = (h (k) + i) mod m, za i {0, 1,... m 1}. Za ključ k prva ćelija koju ispitujemo je T[h (k)], tj. ćelija zadata pomoćnom heš funkcijom. Dalje ispitujemo T[h (k) + 1] itd. dok ne dodjemo do T[m 1]. Tada ispitujemo ćelije T[0], T[1]... dok ne probamo ćeliju T[h (k) 1]. Linearno ispitivanje je jednostavno za implementaciju, ali dopušta problem poznat kao primarno klasterovanje. Izgradjuje se dug niz zauzetih ćelija i raste vreme pretraživanja. Klasteri se prave obzirom da se prazna ćelija, koja prethodi nizu od i punih ćelija, popunjava sledeća sa verovatnoćom i + 1 m.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Kvadratno ispitivanje Dug niz zauzetih ćelija ima tendenciju rasta, pa raste i srednja vrednost traženja. Kvadratno ispitivanje koristi heš funkciju oblika h(k, i) = (h (k) + c 1 i + c 2 i 2 ) mod m, gde je h pomoćna heš funkcija, c 1, c 2 0 pomoćne konstante i i {0, 1,... m 1}. Inicijalna pozicija ispitivanja je T[h (k)]. Naredne pozicije koje se ispituju izjednačavaju se sa vrednostima koje zavise od ponašanja kvadrata posmatranog broja i. Ovaj metod radi mnogo bolje od linearnog ispitivanja, ali da bi iskorišćenje heš tabele bilo potpuno, vrednosti c 1, c 2 i m moraju biti ograničene. Ako dva ključa imaju iste inicijalne pozicije, njihovi probni nizovi su jednaki, jer je h(k 1, 0) = h(k 2, 0), što povlači h(k 1, i) = h(k 2, i). Ova osobina vodi do blaže forme klasterovanja sekundarno klasterovanje.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Dvostruko heširanje Dvostruko heširanje je jedna od najboljih metoda dostupnih za otvoreno adresiranje zbog toga što permutacije koje se dobijaju imaju mnoge karakteristike slučajno izabranih permutacija. Dvostruko heširanje koristi heš funkciju oblika: h(k, i) = (h 1 (k) + ih 2 (k)) mod m, gde su h 1, h 2 pomoćne heš funkcije. Inicijalna probna pozicija je T[h 1 (k)]. Sukcesivne probne pozicije razlikuju se od prethodne pozicije za h 2 (k) modulo m. Za razliku od linearnog i kvadratnog ispitivanja, ovde probni niz, na dva načina, zavisi od ključa k, obzirom da inicijalna probna pozicija ili obe probne pozicije mogu da variraju.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Dvostruko heširanje(cont.) Vrednost h 2 (k) mora biti uzajamno prosta sa dužinom m heš tabele. Uobičajeni način da se ostvari ovaj uslov je da m bude stepen broja 2 i da se h 2 definiše tako da uvek rezultuje prostim brojem. Drugi način je da m bude prost i da se h 2 dizajnira tako da uvek bude pozitivan ceo broj manji od m. Primer: Pretpostavimo da je m prost broj i h 1 (k) = k mod m, h 2 (k) = 1 + (k mod m ), gde je m izabrano da bude malo manje od m (recimo m 1).
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Dvostruko heširanje(cont.) Primer: Ako je k = 123456, m = 701 i m = 700 imamo da je h 1 (k) = 80, h 2 (k) = 257. Dakle, prva proba je na poziciji 80 = h 1 (k) i ispituje se svaka 257. ćelija modulo m dok se ne nadje ključ ili dok se ne ispitaju sve ćelije. Dvostruko heširanje je uopštenje linearnog ili kvadratnog ispitivanja u O(m 2 ) probnih nizova koji se koriste u odnosu na O(m), obzirom da svaki mogući par (h 1 (k 1 ), h 2 (k 2 )) donosi različite probne nizove. Kao rezultat, uspeh dvostrukog heširanja se čini veoma bliskim uspehu "idealne" šeme uniformnog heširanja.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem Naša analiza otvorenog adresiranja biće izražena preko faktora opterećenja α = n, ali kada m, n. m Napomena: U otvorenom adresiranju imamo najviše jedan element u ćeliji, pa kako je n m, to povlači α 1. Pretpostavimo da je reč o uniformnom heširanju. U ovoj idealizovanoj šemi, niz ispitivanja {h(k, 0), h(k, 1),..., h(k, m 1)}, koji se koristi za ubacivanje ili traženje ključa k može sa bilo kojom verovatnoćom biti bilo koja permutacija skupa {0, 1,..., m 1}. Dati ključ ima jedinstven niz ispitivanja odredjen njime.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) Počinjemo sa analizom broja ispitivanja u bezuspešnom traženju. Teorema: Za datu heš tabelu otvorenog adresiranja sa faktorom opterećenja α = n < 1, očekivani broj ispitivanja je najviše m 1, uz pretpostavku uniformnog heširanja. 1 α Dokaz: U bezuspešnom traženju, svako ispitivanje osim poslednjeg, pristupa zauzetoj ćeliji koja ne sadrži željeni ključ, dok je poslednja probana ćelija prazna. Definišemo slučajnu promenljivu X koja predstavlja broj ispitivanja učinjenih u bezuspešnom traženju.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) Neka je A i, za i = 1, 2,... dogadjaj u kome postoji i-to ispitivanje i to je zauzeta ćelija. Tada je dogadjaj {X i} presek dogadjaja A 1 A 2 A i 1. Ograničimo verovatnoću P{X i} ograničavajući P{A 1 A 2 A i 1 } = P{A 1 } P{A 2 A 1 } P{A 3 A 1 A 2 } P{A i 1 A 1 A 2 A i 2 } Kako u m ćelija ima n elemenata to je P{A 1 } = n m. Za j > 1, verovatnoća da postoji j-ta proba i da je to zauzeta ćelija, pri čemu je i prethodnih j 1 ispitivanja dalo zauzete ćelije je n j + 1, zbog pretpostavke uniformnog heširanja. m j + 1
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) Obzirom da je n < m imamo n j m j n, za svaki 0 j m. m Prema tome, imamo da je verovatnoća P{X i} = n m n 1 m 1 n i + 2 m i + 2 ( n )i 1 = α i 1 m E[X] = P{X i} α i 1 = i=1 i=1 i=0 α i = 1 1 α. Dakle, ograničili smo sumu i gornja granica za 1 + α + α 2 + ima intuitivnu interpretaciju. Jedno ispitivanje se uvek vrši i ono sa verovatnoćom aproksimativno α daje zauzetu ćeliju, pa je neophodno drugo ispitivanje.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) Sa verovatnoćom, aproksimativno, α 2 prve dve ćelije su zauzete i neophodno je treće ispitivanje itd. Ako je α konstanta, neuspešno traženje se odvija u O(1) vremenu. Posledica: Ubacivanje elemenata u heš tabelu otvorenog adresiranja sa 1 faktorom opterećenja α, zahteva najviše 1 α ispitivanja u proseku, uz uslov uniformnog heširanja. Dokaz: Element se u tabelu ubacuje samo ako postoji prazna ćelija i α < 1. Ubacivanje ključa zahteva bezuspešno traženje praćeno smeštanjem ključa u prvu praznu ćeliju koja je 1 nadjena. Tako je očekivani broj proba najviše 1 α.
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) Računanje očekivanog broja ispitivanja za uspešno traženje zahteva malo više posla. Teorema: Za datu heš tabelu otvorenog adresiranja sa faktorom opterećenja α < 1, očekivani broj ispitivanja za uspešno traženje je najviše 1 α ln 1, uz pretpostavku uniformnog 1 α heširanja i pretpostavku da svi ključevi imaju jednake verovatnoće da budu nadjeni u tabeli. Dokaz: Traženje ključa k ima isti niz ispitivanja kao ubacivanje elementa sa ključem k. Prema prethodnoj pretpostavci, ako je k bio i + 1. ključ ubačen u heš tabelu, tj. očekivani broj ispitivanja učinjenih u traženju ključa k je najviše:
Linearno ispitivanje Analiza heširanja otvorenim adresiranjem Analiza heširanja otvorenim adresiranjem(cont.) 1 1 i m = m m i. Tako dobijamo srednji broj svih ispitivanja u uspešnom traženju: 1 n n 1 i=0 m m i = m n n 1 i=0 m 1 m i = 1 α m k=m n+1 1 1 α m n x dx = 1 α (ln x) m m n = 1 α ln m m n 1 α ln 1 1 n = 1 α ln 1 1 α. m 1 k
Mada se heširanje najviše koristi za odlične očekivane rezultate, heširanje se može koristiti i za najgori slučaj to je u slučaju kada je skup ključeva statički i jednom kada se ključevi smeste u tabelu, prostor ključeva se ne menja. Neke aplikacije prirodno imaju statičke skupove ključeva, na primer, skup rezervisanih reči u programskom jeziku ili skup imena fajlova na CD-romu. Heš tehniku zovemo perfektnim heširanjem, ako je broj memorijskih pristupa pri traženju, u najgorem slučaju O(1). Osnovna ideja za kreiranje šeme perfektnog heširanja je jednostavna. Pri tome koristimo šemu heširanja sa dva nivoa, u kojoj se na svakom nivou koristi univerzalno heširanje.
(cont.) Prvi nivo je osnovni nivo, kao heširanje formiranjem lanaca: n ključeva se hešira u m ćelija korišćenjem heš funkcije h pažljivo odabrane iz familije univerzalnih heš funkcija. Umesto formiranja liste ključeva koji heširaju u istu ćeliju j, koristimo malu, sekundarnu heš tabelu S j koja je odredjena heš funkcijom h j. Pažljiv izbor funkcije h j obezbedjuje da na drugom nivou ne dodje do kolizije. Kao garancija da na drugom nivou neće doći do kolizije, treba da veličina m j heš tabele S j bude kvadrat broja n j ključeva koji heširaju u ćeliju j. Dok imamo ovakvu kvadratnu zavisnost m j od n j izgleda verovatnim da će doći do prepunjavanja. Pokazaćemo da dobar izbor heš funkcije na prvom nivou omogućava da očekivana količina iskorišćenog prostora ostane O(n).
(cont.) Koristimo heš funkciju iz univerzalne klase heš funkcija. Prvi nivo je izabran iz klase H p,m, gde je p prost broj veći od proizvoljne ključne vrednosti. Oni ključevi koji heširaju u ćeliju j su re-hešovani u sekundarnu heš tabelu S j veličine m j korišćenjem heš funkcije h j izabrane iz klase H p,mj. Ići ćemo u dva koraka: Najpre ćemo obezbediti da u sekundarnoj heš tabeli ne dodje do kolizije. Drugo, pokazaćemo da je očekivana količina memorije koja je globalno iskorišćena za primarnu i sekundarnu heš tabelu O(n). Primer: Koristimo perfektno heširanje za skladištenje skupa K = {10, 22, 37, 40, 52, 60, 70, 72, 75}.
(cont.) Primer: Spoljna heš funkcija je h(k) = ( (ak + b) mod p ) mod m, gde je a = 3, b = 42, p = 101 i m = 9. Na primer, h(75) = 2, pa ključ 75 hešira u ćeliju 2 tabele T.
(cont.) Teorema: Ako n ključeva smestimo u heš tabelu veličine m = n 2 korišćenjem heš funkcije h slučajno izabrane iz klase univerzalnih heš funkcija, verovatnoća da će doći do kolizije je manja od 1 2. Dokaz: Ima ( n) 2 parova ključeva koji mogu da dodju u koliziju. Verovatmoća da dva ključa dodju u koliziju je 1, ako je heš m funkcija h izabrana slučajno iz univerzalne klase heš funkcija H. Označimo sa X slučajnu promenljivu koja broji kolizije. Kada je m = n 2 očekivani broj kolizija je E[X] = ( ) n 1 2 n(n 1) = 1 n2 2 n = n 1 2 2n < 1 2.
(cont.) Teorema: Ako n ključeva smestimo u heš tabelu veličine m = n korišćenjem heš funkcije h slučajno izabrane iz klase univerzalnih heš funkcija, onda je E [m 1 j=0 n 2 ] j < 2n, gde je n j broj ključeva koji hešira u ćeliju j. Dokaz: Počinjemo od identiteta koji važi za proizvoljan nenegativan ceo broj a, tj. a 2 = a + 2 ( a) 2. Imamo E [m 1 n 2 ] [ m 1 ) ( nj )] [ j = E nj + 2( m 1 ] = E n j 2 j=0 j=0 j=0
(cont.) +2E [m 1 j=0 ( nj 2 ) ] = E[n] + 2E [ m 1 j=0 ( nj 2 ) ] [ m 1 = n + 2E Kako je reč o univerzalnom heširanju dobijamo očekivanu vrednost, za m = n ( ) n 1 n(n 1) = = n 1. 2 m 2m 2 Tako je E [m 1 j=0 n 2 ] n 1 j n + 2 2 = 2n 1 < 2n. j=0 ( nj 2 ) ].
(cont.) Posledica 1: Ako n ključeva smestimo u heš tabelu veličine m = n korišćenjem heš funkcije h slučajno izabrane iz univerzalne klase heš funkcija, te ako je dužina svake sekundarne heš tabele m j = n 2 j, za j = 0, m 1, onda je očekivana veličina skladišta potrebna za sve sekundarne heš tabele u šemi perfektnog heširanja manja od 2n. Posledica 2: Ako n ključeva smestimo u heš tabelu veličine m = n korišćenjem heš funkcije h slučajno izabrane iz univerzalne klase heš funkcija, te ako izjednačimo dužinu svake sekundarne heš tabele m j = n 2 j, za j = 0, m 1, onda je verovatnoća za potpuno skladištenje sekundarnih heš tabela čija dužina nije manja od 4n manja od 1 2.
Ispitivanje binarnih stabala su strukture podataka koje podržavaju mnoge operacije dinamičkog skupa, koje sadrže: SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT and DELETE. Tako binarna stabla mogu da se koriste kao rečnik. Osnovne operacije zahtevaju vreme proprcionalno visini stablka. Za kompletno binarno stablo od n čvorova ove operacije u najgorem slučaju zahtevaju O(n) vremena. Svaki čvor jedan objekat. Svaki čvor sadrži polja levo, desno i p, koja pokazuju na njegovo levo dete, desno dete i njegovog roditelja, tim redom. Ako neko dete ili roditelj nedostaju odgovarajuće polje je NIL. Koren je jedini čvor u stablu čiji je roditeljski čvor NIL.
Ispitivanje binarnih stabala (cont.) Ključevi su u binarnom stablu uvek uskladišteni tako da zadovoljavaju osobine stabla: Ako je x čvor stabla i y čvor levog podstabla od x, onda je key[y] key[x]. Ako je y čvor desnog podstabla od x, onda je key[x] key[y]. Uredjeni prolaz kroz stablo osobina stabla da se mogu odrediti svi ključevi u stablu jednostavnim rekurzivnim algoritmom. Algoritam se tako naziva jer je ključ korena nalazi izmedju vrednosti u levom i onih u desnom podstablu. Algoritam uzima O(n) vremena za prolaz kroz stablo sa n čvorova, jer posle inicijalnog poziva, za svaki čvor pozivamo proceduru 2 puta-jednom za levo i jednom za desno dete.
Ispitivanje binarnih stabala (cont.) Teorema: Ako je x koren podstabla sa n čvorova, poziv prethodne procedure zahteva O(n) vremena. Dokaz: Neka T(n) označava vreme potrebno za INORDER-TREE-WALK, kada se poziva u korenu podstabla sa n čvorova. INORDER-TREE-WALK zahteva mali konstantni deo vremena za test x NIL.
Ispitivanje binarnih stabala (cont.) Za ispitivanje praznog podstabla T(0) = C, za proizvoljnu konstantu C. Za n > 0 pretpostavimo da se procedura poziva za čvor x čije levo podstablo ima k, a desno n k 1 čvorova. Vreme da se izvrši INORDER-TREE-WALK(x) je T(n) = T(k) + T(n k 1) + d, za neku pozitivnu konstantu d, koja reflektuje vreme potrebno da se izvrši procedura, tj. vreme potrebno za rekurzivne pozive. Koristimo metod supstitucije da pokažemo da je T(n) = O(n), dokazujući da je T(n) = (c + d)n + c. Za n = 0 imamo da je (c + d) 0 + c = c = T(0). Za n > 0 imamo:
Ispitivanje binarnih stabala (cont.) T(n) = T(k) + T(n k 1) + d = ((c + d)k + c) + ((c + d)(n k 1) + c) + d = (c + d)n + c c + c d + d = (c + d)n + c. Dakle, poziv procedure zahteva O(n) vremena.
Ispitivanje binarnih stabala Pretraživanje Najčešća operacija traženje ključa smeštenog u binarnom stablu. Najpre traženje čvora sa datim ključem u stablu: Procedura kreće od korena niz stablo, a čvorovi posmatrani tokom rekurzije traže prolazno vreme O(h), gde je h težina stabla.
Ispitivanje binarnih stabala Pretraživanje(cont.)
Ispitivanje binarnih stabala Procedura za maximum je simetrična:
Ispitivanje binarnih stabala
Ispitivanje binarnih stabala (cont.) Vreme rada ove procedure za stablo visine h je O(h), jer pratimo put ili uz ili niz stablo. Procedura za nalaženje prethodnika datog čvora x, PREDECESSOR (X), simetrična je ovoj proceduri, tj. krećemo se niz i uz levo podstablo od x. Teorema: Dinamički skup operacija SEARCH, MINIMUM, MAXIMUM, SUCCESSOR i PREDECESSOR mogu se napisati tako da rade u O(h) vremenu u binarnom stablu visine h. Operacije ubacivanja i brisanja zahtevaju dinamičke skupove, koje dobijamo izmenama u binarnom stablu, uz zadržavanje osobina ovog stabla.
Ispitivanje binarnih stabala Ubacivanje
Ispitivanje binarnih stabala Ubacivanje(cont.) Procedura trasira put niz stablo počev od korena. Pokazivač x trasira put, a y ima funkciju roditelja od x. Pokazivači se kreću niz stablo dok x ne postane NIL. Ovo NIL zauzima poziciju na koju treba da smestimo z.
Ispitivanje binarnih stabala Brisanje Procedura za brisanje datog čvora z iz binarnog stabla uzima kao argument pokazivač na z. Ako z nema dece modifikujemo roditelja p(z) da zameni z, a njegovo dete je NIL. Ako z ima samo jedno dete, izbacujemo z pravljenjem novog linka izmedju njegovog roditelja i njegovog deteta. Ako čvor ima 2 deteta izbacujemo sledbenika y od z koji nema levo dete i zamenjujemoključ od z i prateće podatke, ključem od y i pratećim podacima.
Ispitivanje binarnih stabala Brisanje(cont.)
Ispitivanje binarnih stabala Brisanje(cont.)
Ispitivanje binarnih stabala Visina binarnog stabla varira u zavisnosti od toga da li se elementi ubacuju ili izbacuju. Zbog toga se malo zna o prosečnoj visini binarnog stabla. Definisaćemo slučajno formirano binarno stablo od n ključeva, koje raste ubacivanjem ključeva slučajnim redom u inicijalno prazno stablo, gde je svaka od n! permutacija ulaznih ključeva jednako verovatna. Ako sa X n označimo visinu slučajno formiranog binarnog stabla sa n ključeva, možemo definisati eksponencijalnu visinu Y n = 2 X n. Kada gradimo ovakvo stablo, biramo jedan ključ koji postavljamo na mesto korena i sa R n označimo slučajnu promenljivu koja čuva rang ovog ključa. Znači, R n čuva poziciju koju će ovaj ključ zauzeti kada se ostali ključevi sortiraju.
Ispitivanje binarnih stabala (cont.) Svaki od brojeva {1, 2,..., n} ima jednaku verovatnoću da bude R n. Ako je R n = i levo podstablo je izgradjeno od i 1-og, a desno od n i slučajno izabranih ključeva. Tada je eksponencijalna visina Y n = 2 max(y i 1, Y n i ). Kao osnovni slučaj uzimamo Y 1 = 1, jer je eksponencijalna visina stabla sa jednim čvorom, 2 0 = 1, i pogodno je staviti da je Y 0 = 0. Dalje definišemo indikatore slučajnih promenljivih Z n,1, Z n,2,..., Z n,n, gde je Z n,i = I{R n = i}, za svaki i = 1, n. Kako je R n sa jednakom verovatnoćom bilo koji element skupa {1, 2,..., n} imamo Pr{R n = i} = 1 n, tj. E[Z n,i] = 1, za svaki n i = 1, n.
Ispitivanje binarnih stabala (cont.) Kako je tačno jedna od vrednosti Z n,i = 1, dok su ostale nula imamo n Y n = Z n,i (2 max(y i 1, Y n i )). i=1 Pokazaćemo samo da je E[Y n ] polinomijalna funkcija od n, što znači da je E[X n ] = O(lg n). Indikator slučajne promenljive Z n,i = I{R n = i} nezavisan je od vrednosti Y i 1 i Y n i. Levo podstablo je slučajno izgradjeno od i 1-og ključa čiji su rangovi manji od i. Ova struktura, sem ključeva koje sadrži ne zavisi od R n, pa su slučajne promenljive Y i 1 i Z n,i nezavisne. Isto je i sa desnim podstablom i slučajnim promenljivim Y n i i Z n,i. Dakle:
Ispitivanje binarnih stabala (cont.) E[Y n ] = E [ n Z n,i (2 max(y i 1, Y n i )) ] = = = i=1 n i=1 n i=1 n i=1 n E[Z n,i (2 max(y i 1, Y n i ))] E[Z n,i ]E[2 max(y i 1, Y n i )] 1 n 2E[max(Y i 1, Y n i )] = 2 E[max(Y i 1, Y n i )] 2 n n i=1 n E[Y i 1 ] + E[Y n i ]. i=1
Ispitivanje binarnih stabala (cont.) Kako se svaka od E[Y 0 ], E[Y 1 ],..., E[Y n ] pojavljuje dva puta u ovoj sumi, jednom kao Y n i, drugi put kao Y i 1 dobijamo E[Y n ] 4 n n 1 i=0 E[Y i ]. Korišćenjem principa matematičke indukcije pokazuje se da važi: ( ) ( ) n 1 i + 3 n + 3 =. 3 4 i=0 Transfinitnom indukcijom ćemo takodje dokazati da je E[Y n ] = 1 ( ) n + 3. 4 3
Ispitivanje binarnih stabala (cont.) 1. Za n = 0 je E[Y 0 ] = 0 1 ( ) 3 = 1 4 3 4 ; Za n = 1 imamo E[Y 1 ] = 1 1 ( ) 4 = 1. 4 3 2. Pretpostavimo da za svaki i < n važi E[Y i ] = 1 ( ) i + 3. 4 3 3. Dokažimo tvrdjenje za prirodan broj n. Važi: E[Y n ] 4 n 1 E[Y i ] 4 ( ) n 1 1 i + 3 = 1 ( ) n 1 i + 3 = n n 4 3 n 3 i=0 i=0 i=0 = 1 ( ( ) ( ) ( ) ( ) 3 4 5 n + 2 ) + + + n 3 3 3 3
Ispitivanje binarnih stabala (cont.) ( ) 1 n + 3 = 1 (n + 3)! n 4 n 4!(n + 3 4)! = 1 (n + 3)! 4n 3!(n 1)! = 1 (n + 3)! 4 3!n! = 1 (n + 3)! 4 3!((n + 3) 3)! = 1 ( ) n + 3. 4 3 Ovim smo pokazali da tvrdjenje važi za sve prirodne brojeve i kako još važi Jensenova nejednakost E[Y n ] = E[2 X n ] 2 E[X n], dobijamo da je 2 E[Xn] E[Y n ] 1 ( ) n + 3 = 1 (n + 3)(n + 2)(n + 1) = 4 3 4 6 =
Ispitivanje binarnih stabala (cont.) Dakle, = n3 + 6n 2 + 11n + 6. 24 E[X n ] = log 2 2 E[X n] = log 2 n 3 + 6n 2 + 11n + 6 24 log 2 (n 3 + 6n 2 + 11n + 6) log 2 n 3 = 3 log 2 n, odnosno, E[X n ] = O(log 2 n). Teorema: Očekivana visina binarnog stabla izgradjenog od n slučajno izabranih ključeva je O(log 2 n).
Predstavljanje grafova Grafovski algoritmi Mnogi računarski problemi definisani u terminima grafova; Graf G = (V, E); V neprazan skup čije elemente nazivamo čvorovi grafa; E V V skup čije elemente nazivamo grane grafa; Vreme neophodno za izvršenje graf algoritma obično zavisi od broja čvorova ( V ) grafa i broja grana grafa ( E ). Elementarni graf algoritmi predstavljanje i pretraživanje grafa; Algoritam pretraživanja može da otkrije puno o strukturi grafa. Predstavljanje grafa na dva standardna načina: kolekcija listi susedstva matrica susedstva
Predstavljanje grafova Lista susedstva Lista susedstva češći način za predstavljanje grafova; Dobar način za predstavljanje retkih grafova, E V 2. Matrica susedstva pogodna za guste grafove, E V 2 Reprezentacija od G = (V, E) listom susedstva niz Adj koji se sastoji od V listi od kojih svaka odgovara po jednom čvoru iz V. u V, Adj[u] = {v (u, v) E} skup svih suseda čvora u u G (može da sadrži i pokazivače na čvorove) Za usmereni graf G suma dužina svih listi susedstva je E ; Za neusmereni graf G suma dužina svih listi susedstva je 2 E ; U oba slučaja u memoriji je potrebno O(V + E) prostora.
Predstavljanje grafova Lista susedstva (cont.) Lista susedstva može biti prilagodjena predstavljanju težinskih grafova; Težinski grafovi svakoj grani se pridružuje težina zadata funkcijom w : E R w težinska funkcija; (u, v) E, w(u, v) težina grane koju u listu susedstva reči u smeštamo sa čvorom v Nepovoljnost ovakvog predstavljanja ne postoji mogućnost brzog ispitivanja da li v Adj[u]. Ovo se prevazilazi predstavljanjem grafa matricom susedstva.
Predstavljanje grafova Matrica susedstva Za predstavljanje grafa matricom susedstva pretpostavka da su čvorovi numerisani sa 1, 2,..., V proizvoljnim redom; A matrica susedstva dimenzije V V ; A = (a ij ) V i,j=1 a ij = Neophodna memorija O( V 2 ) { 1, (i, j) E 0, u protivnom Za neusmerene grafove A = A T ; Kod težinskih grafova težinu grane w(u, v) smestamo u vrstu u i kolonu v matrice susedstva Za nepostojeće grane NIL, 0 ili.