400 likes | 669 Views
Organizacija invertovano-indeksnih datoteka. Organizacija indeksa. Pristup invertovanim indeksima. Korisnici postavljaju upite jednim terminom ili koriste više termina U invertovanim indeksima svakom terminu (ili ključu) je pridružena dugačka lista identifikatora dokumenata
E N D
Organizacija invertovano-indeksnih datoteka Organizacija indeksa
Pristup invertovanim indeksima • Korisnici postavljaju upite jednim terminom ili koriste više termina • U invertovanim indeksima svakom terminu (ili ključu) je pridružena dugačka lista identifikatora dokumenata • Mnogim ključevima su pridružene iste liste identifkatora dokumenata (sinonimi, ključevi u indeksima koji obrađuju sve vrste podsecanja, itd.) • Najefikasnije je da se koriste veliki indeksi u kojima je uz ključ zapisan samo pokazivač ka listama identifikatora dokumenata
1. Sekvancijalni pristup • Prva pretpostavka je da je indeks na neki način uređen (npr. svi ključevi su u rastućem alfabetskom poretku). • Upitni termin se traži jedan po jedan u indeksu sve dok ne bude: • pronađen • dostignut je termin koji mu sledi u alfabetskom poretku • stiglo se do kraja indeksa • Vreme potrebno da se obavi sekvencijalna pretraga zavisi od dva faktora: • Samog upitnog termina, jer od njega zavisi pozicija u indeksu • Dužine indeksne datoteke (N) • Za sekvencijalno pretraživanje uređenog indeksa potrebno je otprilikeN/2poređenja i u slučaju da je termin u indeksu i da nije
communication computation computational computer data dictionary information informatics network software communication computation computational computer data dictionary information informatics network software Primer uspešnog i neuspešnog sekvencijalnog pretraživanja indeksa Traži se: dictionary Traži se: computing
2. Alfabetski lanci • Nalikuju pretrazi rečnika. Npr. Ako tražimo terminpsychology u rečniku ćemo prvo pronaći slovoP, a zatim bismo gledali u zaglavlja stranica dok ne nađemoPS, a dalje bismo tražili linearno. • Kod alfabetskih lanaca, prvo pronalazimo kutijice po prvom slovu, a odatle sledimo pokazivač ka novim kutijicama, itd. dok ne nađemo šta tražimo, ili ne dođemo do liste koju ćemo linearno pretraživati. • Problem sa alfabetskim lancima je što su u realnim situacijama neki termini vrlo bliski jedni drugima, tj. neka slova su mnogo gušće popunjena od ostalih pa će od toga zavisiti koliko poređenja je potrebno dok ne nađemo termin (ili utvrdimo da ga nema). Na primer, computation, computations, computational, computer, computers, cumputerization, etc.
communication computation computational computer data dictionary information informatics network software Primer traži se: computational communication, computation, computational, computer C O A data D dictionary I I N Information, informatics N E network O software S
3. Binarno pretraživanje • Za velike indeksne datoteke sekvencijalno pretraživanje zahteva mnogo vremena. • Jedno poboljšanje se sastoji u tome da se smanji broj pokušaja (ili provera) potrebnih da se indeksni termin pronađe ili da se utvrdi da ga u indeksu nema. • Ako su indeksni termini uređeni (što je obično slučaj) broj pokušaja se može smanjiti primenom tehnike binarnog pretraživanja.
Osnovna ideja binarnog pretraživanja • Ideja se sastoji u tome da se u svakom koraku pretraživanja indeksa broj indeksnih termina koje potencijalno treba pretražiti smanji na pola. • Termin koji se traži se poredi sa terminom koji se nalazi u sredini intervala indeksnih termina preostalih za pretraživanje. Poređenje može da dâ tri rezultata: • Indeksni termin je jednak središnjem terminu (pronađen); • Indeksni termin je manji od središnjeg termina – interval sledeće pretrage je donja polovina tekućeg intervala; • Indeksni termin je veći od središnjeg termina – interval sledeće pretrage je gornja polovina tekućeg intervala;
Algoritam binarnog pretraživanja n je broj indeksnih termina u indeksu ključ je indeksni termin koji se traži u indeksu početak donji1; gornji n; sve dok je donji gornji ponavljaj srednji(donji+gornji) div 2; ako je ključ = indeks[srednji] onda je ključ pronađen inače ako je ključ < indeks[srednji] onda je gornjisrednji-1 inače donjisrednji+1 kraj
Primer • Neka tražimo u indeksu ‘network’ • Neka je indeks uređen i neka sadrži 10 termina: • communication, • computation, • computational, • computer, • data, • dictionary, • information, • informatics, • network, • software
Efikasnost binarnog pretraživanja • U prethodnom primeru je potrebno 3 pokušaja da bismo pronašli traženi termin, u poređenju sa 9 potrebnih za sekvencijalno pretraživanje. • U opštem slučaju je broj pokušaja kod binarnog pretraživanjaO(log2n) – ili kako se obično kaže ‘reda veličine binarnog logaritma od broja indeksnih termina’
Odnos linearne, eksponencijalne i logaritamske funkcije • Pošto jef(x) = exjedan-jedan funkcija ona ima inverznu funkciju. Njena inverzna funkcija je f(x) = logex = lnx • Grafici ovih funkcija su simetrični u odnosu na grafik linerane funkcije f(x)=x • Eksponencijalna funkcija mnogo brže raste od linearne funkcije • Zato logaritamska funkcija mnogo sporije raste od linearne funkcije
Ilustrativni primer – priča o Makiju i grašku • Obećanje – za prvo zrno graška nagrada 1 dinar • Za svako naredno zrno graška već osvojena nagrada se duplira. (nagrada raste kao eksponencijalna funkcija 2x, gde je x broj pojedenih zrna)
Šta je rezultat postignutog dogovora 1 1 17 131.072 2 2 18 262.144 3 4 19 524.288 4 8 20 1,048.576 5 16 21 2,097.152 6 32 22 4,194.304 7 64 23 8,388.608 8 128 24 16,777.216 9 256 25 33,554.432 10 512 26 67,108.864 11 1024 27 134,217.728 12 2048 28 268,435.456 13 4096 29 536,870.912 14 8192 30 1,073.741.824 15 32768 16 65536 Šta bi bilo da je dogovor bio: za svako zrno graška jedan dinar, tj. Koliko zrna graška toliko dinara (linearna funkcija) 1 1 17 17 2 2 18 18 3 3 19 19 4 4 20 20 5 5 21 22 6 6 22 22 7 7 23 24 8 8 25 25 9 9 26 26 10 10 27 27 11 11 28 28 12 12 29 29 13 13 30 30 14 14 15 15 16 16 Rezultat ubeđivanja Makija da je grašak profitabilan ako ne i ukusan Ali, Maki je mali ali nije naivan bankrot roditelja
4. Binarno drvo • Problemi sa binarnim pretraživanjem: • Kako pronaći taj središnji element u indeksu? Lako, ako indeks može da stane u niz, ali ako ne može... • Dodavanje ili izbacivanje elemenata iz indeksa otežano (indeks treba ponovo sortirati) • Struktura binarnog drveta se sastoji od čvorova od kojih svaki sadrži indeksni termin i pokazivača ka poddrvetima koji sadrže indeksne termine koji mu prethode, odnosno koji ga slede u izabranom poretku. • Organizacija drveta podržava operacije kao što su pronalaženje ključa, umetanje indeksnog termina, brisanje indeksnog termina.
Primer binarnog drveta – pronalaženje ključa information data informatics computational network communication computer dictionary computation information software
Dodavanje novog indeksnog termina – file; prvo se obavi neuspešna pretraga, a zatim se ubacuje čvor tamo gde se neuspešna pretraga završila data informatics computational network communication computer dictionary computation information software file
Kako se gradi drvo? Na ulazu: mama, tata, brat, stric, ujak, ujna, sestra, strina, baka, deka
Kako se gradi drvo? Na ulazu: mama, tata, brat, stric, ujak, ujna, sestra, strina, baka, deka
Korisna strana u kojoj je aplet za animaciju binarnog drveta • http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html
Nedostaci binarnog drveta • Izbacivanje čvora iz drveta nije jednostavno • Ako je čvor koji treba izbaciti list drveta, čvor se jednostavno izbacuje; • Ako čvor koji se izbacuje ima samo jedno dete, onda se taj čvor zamenjuje tim jedinim detetom; • Ako čvor koji se izbacuje ima više dece, onda se on zamenjuje čvorom koji ima najmanju vrednost u desnom podrvetu (rekurzivno) • Drvo raste u dubinu i uskoro postaje nebalansirano – neke grane su veoma dugačke, a od dužine grane zavisi broj poređenja pre nego što se termin pronađe u indeksu ili se utvrdi da ga nema.
Izbacivanje indeksnog termina – informatics; čvor nije list, čvor ima dvoje dece; najmanja vrednost u njegovom desnom podrvetu je information data informatics information computational network communication computer dictionary computation information software file
Kako izgleda binarno drvo koje se puni sortiranom listom? baka, brat, deka, mama, sestra, tata baka brat deka mama sestra tata
5. Balansirano drvo ili B-drvo • Kod ovog drveta iz svakog čvora polazi više grana, a ne samo dve kao kod binarnog drveta; • Ovde se svaki čvor sastoji iz uređene liste termina, a uz svaki ide i pokazivač; • Kada se traži ključem pronalazi se u čvoru prvi termin koji sledi iza ključa u izabranom poretku – na tom mestu se prati pokazivač koji vodi ka sledećem čvoru. • Kapacitet B-drveta zavisi od broja termina u čvoru – u sledećem primeru je kapacitet dva termina, a broj pokazivača 3.
Primer B-drvetatraži se ključ rat rat > cat rat > dog cat dog ^ ass ^ ^ ^ cow ^ ^ ^ pig ^ rat ^ rat > pig
Ubacivanje novog ključa u B-drvo • Umetanje počinje od korenog čvora. Da bi seumetnuo novi element treba: • Pretražiti drvo da bi se pronašao list u koji novi element treba umetnuti. Umetnuti novi element u nekoliko koraka: • Ako čvor sadrži manje elemenata od maksimalne dužine u čvoru, onda ima mesta za novi element pa ga treba umetnuti tako da elementi u čvoru ostanu uređeni. • Ako je čvor popunjen treba ga podeliti na dva jednaka dela: • Izabere se središnji element među elementima iz lista koji se deli i novog elementa. • Vrednosti koje su manje od središnjege elmenta idu u novi levi list, a vrednosti koje su veće idu u novi desni list, dok je središnji element onaj koji ih razdvaja. • Ubaciti središnju vrednost u nadređeni čvor ako u njemu ima mesta, a ako nema on mora da se deli. Ako čvor nema nadređeni čvor, onda se kreira novi koren i visina drveta raste.
Primer B-drveta - ubacuje se ključ goat Koren je popunjen i nema mesta zapig koji se uzdigao pa se i taj čvor cepa: dog (središnji) se diže u koren,cat se nalazi na levom putu,a pig na desnom. goat > cat goat > dog cat dog ^ ass ^ ^ ^ cow ^ ^ ^ pig ^ rat ^ goat treba da dođe u ovaj list, ali one je pun pa se ovaj čvor deli na dva apigide u koren pig goat rat
Rezultat ubacivanje termina goat u B-drvo giraffe? yak dog deer sheep cat pig goat rat ass cow horse rhino camel crab
Korisna strana u kojoj je aplet za animaciju B-drveta • Petr Sladek, Češkahttp://slady.net/java/bt/view.php
Prednosti B-drveta • Broj pristupa indeksu (tj. broj poređenja odnosno pokušaja) je srazmeran broju nivoa drveta (slično kao i kod binarnih drveta) • Ali, pošto se blokovi uvek dele umesto da se dodaju nove grane na dno drveta, novi nivoi se ne prave sve dok to nije apsolutno neophodno. • Na taj način se smanjuje srednje pristupno vreme indeksu.
6. Trie • Ovo je podatkovna struktura koja je počela da se koristi 1960-tih godina. • Termin je nastao od engleske reči RETRIEVAL jer se koristi u pronalaženju informacija. Zbog toga nema adekvatnog prevoda na srpski. • Ovaj način organizovanja indeksa dozvoljava da se termini predstavljaju slovo po slovo što ga čini pogodnim za predstavljanje termina proizvoljne dužine. • Najčešće je u upotrebi binarni povezani trie u kome je svaki karakter povezan sa dva pokazivača: desnim i donjim. Desni pokazivač vodi ka sledećem karateru na istoj poziciji u terminu a donji ka narednoj poziciji. • Prilikom pretraživanja, kod neslaganja se sledi desni pokazivač, a kod slaganja donji.
Nedostaci strukture trie • Količina memorije koja potrebna za skladištenje indeksa je velika, jer se uz svaki karakter vezuju dva pokazivača: desni i donji. • Ovo utiče i na vreme pretraživanja jer će se indeks brže pretraživati ako ceo može da stane u unutrašnju memoriju u vreme rada sistema
7. Metode haširanja (engl. hash) • Sastoji su u transformaciji indeksa u haš-tabelu koja svodi oblike rečipromenljivih dužina u kratke kodove (brojeve) fiksne dužine. Dobijeni kodse koristi kao adresa odgovarajućeg termina u invertovanom indeksu (npr. adresa termina u datoteci ili u nizu u unutrašnjoj memoriji). • Funkcija koja prevodi reč promenljive dužine u haš-kod, odnosno adresu,mora da bude takva da, u najvećem broju slučajeva, različiti termini promenljive dužine imaju različit haš-kod (u optimalnomslučaju, funkcija treba da bude 1-1). • Haš-funkcija se možerealizovati recimo na sledeći način: binarni zapis prvih osamkaraktera termina, shvaćeni kao ceo broj deli se sa željenom veličinom rečnika (koja treba da bude prost broj), a ostatak pri deljenju jetraženi haš-kod. Druga mogućnost je da se dve četvorke binarnozapisanih karaktera termina shvaćene kao celi brojevi, pomnože međusobno i da se iz dobijenog rezulata izdvoji jedan deo kao haš-kod.
Neka imamo tekst: Now is the time to read some books. I neka je svaka reč u indeksu Neka je haš funkcija sledeća: haš-kod se dobija sabiranjem za svaku reč pozicije u abecedi svakog slova reči. Dobijaju se sledeći haš-kodovi za indeks: now 52 is 28 the 33 time 47 to 35 read 28 some 54 books 41 (now = 14(n)+15(o)+23(w) = 52) Simulirani primer korišćenja haš-funkcije
Simulirani primer – dorada haš-koda • Ovo je jednostavan metod, ali se kod njega pojavljuje problem: za samo 8 reči potrebno nam je bar 54 lokacije za skladištenje, iako bi se koristile samo lokacije 28, 33, 35, 41, 47, 52 i 54. • Dopuna metode: svaka dobijena vrednost se deli maksimalnom veličinom indeksa koja je prost broj, u našem primeru npr. 19 • Dobijaju se sledeće vrednosti: • books 7 • is, time, read 9 • now, the 14 • to, some 16 28/19=1*19+9; 47/19=2*19+9
Realan primer • Neka je termin: time • U ASCII kodu to je: • Dobija se celobrojna vrednost: 7*167 + 4*166 + 6*165 + 9*164 + 6*163 + 13*162 + 6*161 + 5*160 = 1,953.066.341
Problem sa svakom haš-funkcijom je kolizija • Sada nije potrebno više od 19 lokacija za skladištenje, ali je problem što neki termini treba da se ‘uguraju’ na iste lokacije (npr. is, time i read). • Ova pojava se naziva kolizija (engl. collison). • Prost broj za deljenje se upravo zato i koristi da bi se kolizija svela na što je moguće manju meru, ali se ipak ne može izbeći. • Jednostavno rešavanje kolizije se može obaviti tako da se uz svaku adresu vezuje povezana lista svih termina čija je to haš-funkcija. Ta povezana lista može lako da se vodi i kao uređena, što čini pretraživanje efikasnijim.
Nedostaci haš-funkcije • Kolizija. Kolizija može da se razrešava i na sledeći način ako je veličina prostora za skladištenje indeksa broj koji je (značajno) veći od broja indeksnih termina. Ako je posle izračunavanja haš-funkcije (bilo kod upisivanja novog termina ili kod pretraživanja) pozicija na izračunatoj adresi zauzeta nekim drugim terminom pokušava se sa sledećom pozicijom po redu sve dok: • Se ne naiđe slaganje (pretraživanje) ili • Ne naiđe na prazno mesto koje označava da se termin ne može pronaći (pretraživanje) ili slobodno mesto za upis termina (umetanje novog). • Kodovako implementiranih haš-funkcija uništava se leksikografski poredaktermina u invertovanom indeksu, tako da će se veoma slične reči, naprimer SAND i SANE naći na sasvim različitim mestima u indeksu. Rezultatje da se pretraživanje unutar opsega (recimo pronalaženje svih termina koji počinju sa SAN*, veoma teško realizuje.)