Download presentation
Presentation is loading. Please wait.
Published byJosé María Ortiz Torregrosa Modified over 6 years ago
1
Organizacija invertovano-indeksnih datoteka
Organizacija indeksa
2
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 identifikatora 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
3
Kako u takvom velikom indeksu pronaći ključ koji se traži?
4
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 otprilike N/2 poređenja i u slučaju da je termin u indeksu i da nije
5
Primer uspešnog i neuspešnog sekvencijalnog pretraživanja indeksa
communication computation computational computer data dictionary information informatics network software communication computation computational computer data dictionary information informatics network software Traži se: dictionary Traži se: computing data > computing
6
2. Alfabetski lanci Nalikuju pretrazi rečnika. Npr. Ako tražimo termin psychology u rečniku ćemo prvo pronaći slovo P, a zatim bismo gledali u zaglavlja stranica dok ne nađemo PS, 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, computerization, etc.
7
Primer communication computation computational computer data
traži se: computational communication, computation, computational, computer communication computation computational computer data dictionary information informatics network software C O A data D I dictionary I N Information, informatics N E network S O software
8
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.
9
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;
10
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
11
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 srednji indeks[srednji] poređenje donji gornji 1 10 5 data network>data 6 8 informatics network> Iformatics 9 network Pronađen!
12
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živanja O(log2n) – ili kako se obično kaže ‘reda veličine binarnog logaritma od broja indeksnih termina’
13
Odnos linearne, eksponencijalne i logaritamske funkcije
Pošto je f(x) = ex jedan-jedan funkcija ona ima inverznu funkciju. Njena inverzna funkcija je f(x) = logex = lnx Logaritamska funkcija y je broj kojim treba stepenovati osnovu (e) da bi se dobilo x. Grafici ovih funkcija su simetrični u odnosu na grafik linearne funkcije f(x)=x Eksponencijalna funkcija mnogo brže raste od linearne funkcije Zato logaritamska funkcija mnogo sporije raste od linearne funkcije
14
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)
15
Rezultat ubeđivanja Makija da je grašak profitabilan ako ne i ukusan
Šta je rezultat postignutog dogovora , , , , , , , , , , , Šta bi bilo da je dogovor bio: za svako zrno graška jedan dinar, tj. Koliko zrna graška toliko dinara (linearna funkcija) 14 14 15 15 16 16 Ali, Maki je mali ali nije naivan bankrot roditelja
16
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.
17
Primer binarnog drveta – pronalaženje ključa information
data information > data computational informatics Information > informatics communication computer dictionary network Information < network computation information software
18
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 file>data computational informatics file<informatics file>dictionary communication computer dictionary network computation file information software
19
Kako se gradi drvo? Na ulazu: mama, tata, brat, stric, ujak, ujna, sestra, strina, baka, deka
20
Kako se gradi drvo? Na ulazu: mama, tata, brat, stric, ujak, ujna, sestra, strina, baka, deka
21
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 poddrvetu (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.
22
Izbacivanje indeksnog termina – informatics; čvor nije list, čvor ima dvoje dece; najmanja vrednost u njegovom desnom podrvetu je information data computational information informatics communication computer dictionary network computation file information software
23
Korisna strana u kojoj je aplet za animaciju binarnog drveta
David Galles, Department of Computer Scinece, San Francisco Binary Search Tree
24
Kako izgleda binarno drvo koje se puni sortiranom listom
Kako izgleda binarno drvo koje se puni sortiranom listom? baka, brat, deka, mama, sestra, tata baka brat deka mama sestra tata Drvo se pretvara u uređenu sekvencijalnu listu
25
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.
26
Primer B-drveta traži se ključ rat
rat > cat rat > dog cat dog ^ ass ^ ^ ^ cow ^ ^ ^ pig ^ rat ^ rat > pig
27
Ubacivanje novog ključa u B-drvo
Umetanje počinje od korenog čvora. Da bi se umetnuo 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šnjeg 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.
28
Primer B-drveta - ubacuje se ključ goat
Koren je popunjen i nema mesta za pig 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 on je pun pa se ovaj čvor deli na dva a pig ide u koren pig goat rat
29
Rezultat ubacivanje termina goat u B-drvo
giraffe? yak dog deer sheep cat pig goat rat ass cow horse rhino camel crab
30
Korisna strana u kojoj je aplet za animaciju B-drveta
David Galles, Department of Computer Science, San Francisco B-Tree animacija
31
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.
32
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 (nekom drugom) terminu a donji ka narednoj poziciji. Prilikom pretraživanja, kod neslaganja se sledi desni pokazivač, a kod slaganja donji.
33
Primer trie: maca, macin, mač, mačka, mačor, mak, maketa
roze kućice označavaju završetak termina
34
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
35
Trie - animacija Tufts University, Computer Science Trie - animacija
36
7. Metode haširanja (engl. hash)
Sastoji su u transformaciji indeksa u haš-tabelu koja svodi oblike reči promenljivih dužina u kratke kodove (brojeve) fiksne dužine. Dobijeni kod se 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 optimalnom slučaju, funkcija treba da bude 1-1). Haš-funkcija se može realizovati recimo na sledeći način: binarni zapis prvih osam karaktera termina, shvaćeni kao ceo broj deli se sa željenom veličinom rečnika (koja treba da bude prost broj), a ostatak pri deljenju je traženi haš-kod. Druga mogućnost je da se dve četvorke binarno zapisanih karaktera termina shvaćene kao celi brojevi, pomnože međusobno i da se iz dobijenog rezulata izdvoji jedan deo kao haš-kod.
37
Simulirani primer korišćenja haš-funkcije
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 na primer: now = 14(n)+15(o)+23(w)= 52
38
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, a haš-kod je ostatak pri deljenju. 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
39
Realan(iji) primer t i m e 0111 0100 0110 1001 0110 1101 0110 0101 74
Neka je termin: time U ASCII kodu to je: Dobija se celobrojna vrednost: 7* * * * * * * *160 = 1, Ta vrednost onda može da se deli veličinom indeksa, a ostatak pri deljenju je haš-kod. t i m e 74 69 6D 65
40
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.
41
Kolizija – rešenje 1 19 1 2 3 4 5 6 7 books 8 9 is 10 11 12 13 14 now
15 16 to 17 18 19 time read the some
42
Nedostaci haš-funkcije
Kolizija. Kolizija može da se razrešava i na drugi 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 na 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). Kod ovako implementiranih haš-funkcija uništava se leksikografski poredak termina u invertovanom indeksu, tako da će se veoma slične reči, na primer SAND i SANE naći na sasvim različitim mestima u indeksu. Rezultat je da se pretraživanje unutar opsega (recimo pronalaženje svih termina koji počinju sa SAN*, veoma teško realizuje.)
43
Kolizija – rešenje 2 Umetanje novog: library
1 2 3 4 5 6 7 books 8 9 is 10 11 12 13 14 now 15 16 to 17 18 19 1 2 3 4 5 6 7 books 8 9 is 10 time 11 read 12 13 14 now 15 the 16 to 17 some 18 19 Umetanje novog: library Hash(library)=87 mod 19 = 9 time read library the some
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.