Organizacija invertovano-indeksnih datoteka

Slides:



Advertisements
Similar presentations
Programiranje kroz aplikacije
Advertisements

1.6. Pohrana podataka.
Provisioning Windowsa 10 na IoT, mobilnim i desktop uređajima
Programi zasnovani na prozorima
Uvod u programiranje - matematika – VI predavanje
PONAVLJANJE CheckBox Koristi se za rešavanje zadataka gde je potrebno omogućiti uključivanje ili isključivanje jedne ili više opcija. Važna svojstva: –Checked.
Algoritmi raspoređivanja
B+ stablo Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems (2000)(2nd ed.)
Teorema o 4 boje(Four color theorem)
PROGRAMIRANJE MENIJA.
CheckBox RadioButton RadioGroup
-Mobilni IP-.
Liste.
The Present Perfect Continuous Tense
Klauzule GROUP BY i HAVING
DNS mr Milovan B. Ivanović, dipl. inž. el.
Projekat strukturnog kabliranja.
Upitni jezik SQL.
Microsoft Office 2007 MS Office je programski paket koji sadrži više programa: MS Word – program za obradu teksta MS Excel – program za izradu tabela sa.
Multimedijalna e-Learning platforma
SEMINARSKI RAD MS WORD.
Petlje FOR - NEXT.
REPEAT…UNTIL Naredbe ciklusa.
Komponente izbora i kontejnerske komponente
Uvod u HTML Zoltan Geller 2017
Explore-plots Katarina Jeremić 143/2011 Jovana Vulović 33/2011
Klauzule GROUP BY i HAVING
KREIRANJE OBJEKATA.
Izrada web-stranica.
RAZGRANATA STRUKTURA Zadaci i rešenja
RAZGRANATA STRUKTURA Zadaci i rešenja
Reference ćelije i opsega
Elektrotehnički fakultet – Podgorica Operativni sistemi
14 UNUTRAŠNJE I ANONIMNE KLASE
LAPLACEOVA TRANSFORMACIJA
Mere položaja z vrednost (ili statndardna vrednost)
Vežba 1. Formatiranje teksta korišćenjem stilskih šablona
Regional Center for Talented Youth Belgrade II
M-datoteke.
Element form Milena Kostadinović.
MessageBox.
predavanja v.as.mr. Samir Lemeš
Pojmovi digitalnog zapisa
Fizičke strukture podataka i pristupne metode: indeksiranje
PubMed Osnove pretraživanja Ana Utrobičić, prof.
PROGRAMSKI JEZIK PASCAL
MATEMATIČKI FAKULTET, UNIVERZITET U BEOGRADU
ELEKTRONIČKA POŠTA ( ) OTVARANJE RAČUNA.
Lazarus okruženje TIPOVI UNIT-a
6. Apstraktne tipovi podatka
Osnovni simboli jezika Pascal
Sistemi zasnovani na skaniranju teksta
FAKULTET KEMIJSKOG INŽENJERSTVA I TEHNOLOGIJE
Do While ... Loop struktura
Programiranje – Small Basic
Memorije Vrste memorija i osnovni pojmovi Ispisne memorije
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Nizovi.
Naredbe u php-u.
Programski jezik C++ - Vježbe - 5. dio
Programski jezik Python
Kratkotrajne veze žena i muškaraca
LimeSurvey Uvjetni prikaz pitanja Internetska istraživanja
BILJEŽNICA MS WORD.
7. Baze podataka Postavke MS Accessa.
Ponavljanje Pisana provjera
Programiranje - Naredbe za kontrolu toka programa – 1. dio
INTERPOLACIJA PO DIJELOVIMA POLINOMIMA
Vježbenica 2: struktura grananja – 2.dio
Kako zaštititi privatnost na facebooku
Presentation transcript:

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

Kako u takvom velikom indeksu pronaći ključ koji se traži?

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

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

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.

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

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 donji1; 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 gornjisrednji-1 inače donjisrednji+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 srednji indeks[srednji] poređenje donji gornji 1 10 5 data network>data 6 8 informatics network> Iformatics 9 network Pronađen!

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’

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 

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)

Rezultat ubeđivanja Makija da je grašak profitabilan ako ne i ukusan Š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 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 information > data computational informatics Information > informatics communication computer dictionary network Information < network 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 file>data computational informatics file<informatics file>dictionary communication computer dictionary network computation file information software

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

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.

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

Korisna strana u kojoj je aplet za animaciju binarnog drveta David Galles, Department of Computer Scinece, San Francisco Binary Search Tree

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

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-drveta traž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 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.

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

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 David Galles, Department of Computer Science, San Francisco B-Tree animacija

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 (nekom drugom) terminu a donji ka narednoj poziciji. Prilikom pretraživanja, kod neslaganja se sledi desni pokazivač, a kod slaganja donji.

Primer trie: maca, macin, mač, mačka, mačor, mak, maketa roze kućice označavaju završetak termina

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

Trie - animacija Tufts University, Computer Science Trie - animacija

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.

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

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

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*167 + 4*166 + 6*165 + 9*164 + 6*163 + 13*162 + 6*161 + 5*160 = 1,953.066.341 Ta vrednost onda može da se deli veličinom indeksa, a ostatak pri deljenju je haš-kod. t i m e 0111 0100 0110 1001 0110 1101 0110 0101 74 69 6D 65

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.

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

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

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