Metoda list inwersyjnych Zakładam, że materiał ten zastępuje nam zajęcia, które się niestety nie odbyły w dniach 10 i 17 kwiecień. Bardzo proszę przejrzeć cały materiał i na kolejne zajęcia przyjść przygotowanym. Przy rozwiązywaniu zadań, wiedza ta będzie niezbędna. A więc zaczynamy Oczywiście rozważamy system informacyjny jako uporządkowaną czwórkę S =<X,A,V,>. Zakładamy, że kartoteka wtórna ma następującą zawartość: A B C 1 A1 B1 C1 2 A2 B1 C2 3 A1 B2 C3 4 A2 B2 C4 5 A1 B2 C1 6 A2 B2 C2 7 A1 B2 C3 8 A2 B2 C4 W metodzie list inwersyjnych wyodrębniamy zbiór wszystkich deskryptorów systemu S zbiór D, oraz funkcję przyporządkowującą adresy : X -> N, gdzie N zbiór adresów. Funkcja tak więc, każdemu obiektowi w systemie przyporządkowuje pewien adres, będący liczbą naturalną (całkowitą, dodatnią), ale tak, że dwóm obiektom przyporządkuje ten sam adres, jeśli będą miały identyczne opisy. Kartoteka wyszukiwawcza Kartotekę tworzą listy adresów tych wszystkich obiektów, które w swoim opisie posiadają deskryptor di listy inwersyjne takie listy tworzymy dla wszystkich deskryptorów ze zbioru D. Definicja. Listę adresów obiektów, które zawierają w swoim opisie deskryptor d i nazywamy listą inwersyjną (d i ). deskryptor d i (d i )= {n 1, n 2,..., n i ), gdzie n i - adres kolejnego obiektu, który w swoim opisie zawiera Zadawanie pytań, uzyskiwanie odpowiedzi czyli jak to działa... Pytania do tak zdefiniowanego systemu S zadajemy w postaci termu t będącego sumą termów składowych t = t1 +...+ tm. Termy składowe pytania mogą być pojedynczymi deskryptorami, a więc term t jest postaci: t = d1 + d2 + d3 +... + dk. Odpowiedź na pytanie t otrzymujemy bezpośrednio przez wygenerowanie list inwersyjnych dla deskryptorów występujących w pytaniu. Zatem: σ(t) = α(d1) α(d2)... α(dk). Termy składowe mają postać iloczynu deskryptorów. Odpowiedź na term t jest więc sumą odpowiedzi na termy składowe: σ(t) = σ(t1) σ(t2)... σ(tm).
Odpowiedź na term składowy ti otrzymujemy jako przecięcie (część wspólna) list inwersyjnych związanych z deskryptorami występującymi w pytaniu ti: σ(ti) = α(d1) α(d2)... α(dk), gdzie ti = d1 d2... dk. Jeśli w listach inwersyjnych występowały adresy obiektów, to kolejnym krokiem będzie znalezienie obiektów odpowiadających tym adresom. Ogólnie więc biorąc odpowiedź na zapytanie t, będące sumą termów składowych jest sumą odpowiedzi na termy składowe: σ(t) = σ(t1) σ(t2)... σ(tm), przy czym σ(ti) = {x є X, μ(x)=ni oraz ni є N' = j α(dj), gdzie N' є N, a dj є ti}. Odpowiedź na pytanie t jest sumą odpowiedzi na pytania składowe, przy czym odpowiedź na pytanie składowe uzyskujemy jako przecięcie list inwersyjnych związanych z deskryptorami występującymi w pytaniu składowym. Redundancja i zajętość pamięci Metoda ta wnosi dużą redundancję, którą można opisać wzorem: r ( di ) N i R 1 N gdzie r liczba deskryptorów w systemie, N liczba obiektów (lub adresów), a symbol d ) - oznacza moc zbioru X. Przykład krok po kroku. 1. Budujemy zbiór deskryptorów D: D = {(A,a1),(a,a2),(B,b1),(B,b2),(C,c1),(C,c2),(C,c3),(C,c4)} 2. Przypisujemy obiektom numery zgodnie z funkcją : X -> N. X1 1 X2 2 X3 3 X4 4 X5 5 X6 6 X7 3 X8 4 Uwaga! Obiekty x3 i x7 oraz obiekty x4 i x8 otrzymują ten sam adres, gdyż mają takie same opisy!!! 3. Tworzymy listy inwersyjne dla każdego deskryptora di należącego do zbioru D: (A,a1)={1,3,5} (a,a2) ={2,4,6} (B,b1) ={1,2} (B,b2) ={3,4,5,6} (C,c1) ={1,5} (C,c2) ={2,6} (C,c3) ={3,7} (C,c4) ={4,8} 4. Zadajemy pytanie jednodeskryptorowe do systemu S:. t=(c,c2) ( i
Przeszukujemy wszystkie listy inwersyjne i znajdujemy listę z deskryptorem pytania t: Uwaga: Zapis będzie oznaczał, że pytanie nie zawiera się w liście inwersyjnej, zaś zapis będzie oznaczał, że pytanie zawiera się w liście inwersyjnej t (A,a1) a więc to nie jest szukana lista inwersyjne, szukamy więc dalej t (a,a2) a więc to nie jest szukana lista inwersyjne, szukamy więc dalej t (B,b1) a więc to nie jest szukana lista inwersyjne, szukamy więc dalej t (B,b2) a więc to nie jest szukana lista inwersyjne, szukamy więc dalej t (C,c1) a więc to nie jest szukana lista inwersyjne, szukamy więc dalej t (C,c2) wreszcie znaleźliśmy listę, która da nam odpowiedź na pytanie t!. Przerywamy przeszukiwanie list 5. Zadajemy pytanie wielodeskryptorowe do systemu S: t=(b,b2)(c,c2) + (A,a2) Jak wcześniej już zaznaczono, gdy pytanie jest w postaci sumy termów składowych, to odpowiedź na każdy term składowy Ti znajdujemy jako: A więc: σ(ti) = α(d1) α(d2)... α(dk), gdzie ti = d1 d2... dk. t=(b,b2)(c,c2) + (A,a2) = t1 + t2 t1 = (B,b2)(C,c2) t2 =(A,a2) A więc teraz odpowiadamy na każde z pytań składowych. t1 = (B,b2)(C,c2) t2 =(A,a2) 1. Szukamy listy inwersyjnej dla pierwszego deskryptora pytania t1, a więc deskryptora (B,b2) t (A,a1) t (a,a2) t (B,b1) t (B,b2) A więc: (B,b2)={1,2} 2. Szukamy listy inwersyjnej dla drugiego deskryptora pytania t2, a więc deskryptora (C,c2) 1. Szukamy listy inwersyjnej dla pierwszego (jedynego) deskryptora pytania t2, a więc deskryptora (A,a2) t (A,a1) t (a,a2) A więc: (A,a2)={2,4,6} t (A,a1) t (a,a2) t (B,b1) t! (B,b2) t (C,c1) t (C,c2 A więc: (C,c2)={2,6} 3. Budujemy odpowiedź na pytanie t1, jako przecięcie list inwersyjnych dla deskryptorów (B,b2) oraz (C,c2) (B,b2)(c,c2)={1,2}{2,6}={2} (t1)={2} (t2)={2,4,6} Odpowiedź na pełne pytanie t uzyskamy jako suma odpowiedzi na pytania składowe: σ(t) = σ(t1) σ(t2)... σ(tm).
W naszym przypadku: T = (t1) (t2) = {2} {2,4,6}={2,4,6} = {x2,x4,x8,x6} Uwaga! Należy uważnie przyjrzeć się odpowiedzi na pytanie t. Otóż odpowiedzią są adresy {2,4,6} ale pamiętajmy, że pod adresem 4 kryją się dwa obiekty {x4} i {x8}. 6. Określamy wielkość redundancji w systemie S: Gdzie: R liczba deskryptorów, u nas jest ich 8 N - liczba adresów obiektów, a więc 6 r ( di ) N i R 1 N ( A, a1) 3, ( A, a2) 3, ( B, b1) 2, ( B, b2) 4, ( C, c1) 2, ( C, c2) 2, ( C, c3) 2, ( C, c4) 2 Redundancja, a więc nadmiar informacji w stosunku do przyjętego minimum wynosi 2. Daje się to bardzo łatwo wytłumaczyć. Otóż każdy adres (1,2,3,4,5,6) jest przechowywany w listach inwersyjnych (A,a1), (a,a2), (B,b1), (B,b2), (C,c1), (C,c2), (C,c3), (C,c4). Dokładnie 3 razy. Np. adres 1 występuje na liście (A,a1), (B,b1) oraz (C,c1).Z tych 3 wystąpień powiemy, że raz potrzebnie, a 2 nadmiarowo. 7. AKTUALIZACJA Proces aktualizacji w przypadku klasycznej metody list inwersyjnych jest identyczny jak w metodzie list prostych z małym uzupełnieniem. W przypadku dodawania nowego obiektu po prostu dopisuje się ten obiekt jako ostatni. W przypadku usuwania proces składa się z wyszukania obiektu i usunięcia go. W przypadku modyfikowania obiektu można to zrobić przez usunięcie tego obiektu i dopisanie go ze zmodyfikowanymi wartościami na końcu. Te operacje są przeprowadzane na kartotece wtórnej, natomiast w kartotece wyszukiwawczej tj. listach muszą zostać zaktualizowane deskryptory opisujące obiekt dopisywany, usuwany lub modyfikowany. Tak, więc dla obiektu dopisywanego: w każdej liście z deskryptorem, do którego obiekt jest relewantny dopisywany jest adres tego obiektu; dla usuwanego obiektu -usuwa się adres tego obiektu z list zawierających adres tego obiektu; a dla modyfikacji - z danej listy jest usuwany adres i dopisywany jest on do innej. Ocena metody klasycznej: Zalety Szybki czas wyszukiwania odpowiedzi na pytania ogólne, wystarczy tylko znaleźć odpowiednią listę inwersyjne Stosunkowo szybki czas wyszukiwania odpowiedzi na pytania szczegółowe. Wady Duża redundancja, Skompilowana aktualizacja Zwiększona zajętość pamięci, przez konieczność pamiętania wszystkich list inwersyjnych
Modyfikacje mają więc na celu: Skrócenie czasu wyszukiwania dla pytań szczegółowych Zmniejszenie zajętości pamięci Niektóre modyfikacje dedykowane są tylko do jednego z tych kryteriów, a inne realizują oba zadania. MODYFIKACJE: 1. PORZĄDKOWANIE ADRESÓW OBIEKTÓW NA LISTACH 2. PORZĄDKOWANIE LIST WG DŁUGOŚCI LEKSYKOGRAFICZNIE WG WYBRANEGO KRYTERIUM Z TABLICA ADRESOWĄ (INDEKSOWANIE) WG CZĘSTOŚCI WYSTĘPOWANIA DANYCH DESKRYPTORÓW W PYTANIU 3. TWORZENIE LIST ZREDUKOWANYCH ZAZNACZANIE PRZEDZIAŁÓW ADRESÓW LISTY DLA PAR DESKRYPTORÓWZ ZAZNACZENIE CZĘSCI WSPÓLNEJ LISTY WIELODESKRYPTOROWE USUWANIE LIST DŁUGICH LISTY ZANEGOWANE TWORZENIE LIST DLA PEWNEGO POZBIORU DESKRYPTORÓW 4. DEKOMPOZYCJE ATRYBUTOWA OBIEKTOWA OBIEKTOWO ATRYBUTOWA HIERARCHICZNA MODYFIKACJE poprawiające czas wyszukiwania odpowiedzi PORZĄDKOWANIE ADRESÓW OBIEKTÓW NA LISTACH Modyfikacja ta ma dość istotne znaczenie. Poniższy przykład pokazuje jakie znaczenie ma dla szybkości wyszukania przecięcia dwóch list inwersyjnych, to czy listy te są uporządkowane czy nie. listy nieuporządkowane: L(d1)={13, 2, 9, 25, 27, 43, 40, 39} L(d2)={9, 8, 2, 13, 10, 22, 16, 14, 25, 37, 27, 43} t= d1 * d2 (konieczność przecięcia list d1 i d2) Ilość porównań w tym celu: 4 + 3 + 1 + 9 + 11 + 12 + 12 + 12 listy uporządkowane: L(d1)={2, 9, 13, 25, 27, 39, 40, 43} L(d2)={2, 8, 9, 10, 13, 14, 16, 22, 25, 27, 37, 43} t= d1 * d2 (konieczność przecięcia list d1 i d2) Ilość porównań w tym celu: 1 + 2 + 2 + 4 + 1 + 2 + 2 + 2 - krótszy czas wyszukiwania - skraca się czas przecięcia list
- czas generowania obiektów skraca się jeżeli dostęp do list jest sekwencyjny, bo jeżeli bezpośredni to nie!!! Aktualizacja: - dodanie: pogarsza, należy porządkować listy po każdej aktualizacji - usunięcie: upraszcza się - modyfikacja opisu obiektu: konieczna reorganizacja, trzeba usunąć obiekt z jednej listy, a dodać go do innej i tą uporządkować PORZĄDKOWANIE LIST WG DŁUGOŚCI Porządkujemy listy w ten sposób, ze na początku są listy najkrótsze a na końcu najdłuższe!!! q = d 1 q * d 2 q *...* d s k gdzie d 1 q pierwszy deskryptor pytania. - wpływa to na czas przecięcia list inwersyjnych (bierze się pierwszy deskryptor z listy i pyta się czy znajduje się w pytaniu, jeśli tak to zapamiętujemy daną listę) Aktualizacja: jest skomplikowana, zmienia się bowiem długość list i należy jest od początku uporządkować!!! PORZĄDKOWANIE LIST LEKSYKOGRAFICZNIE Umożliwia zastosowanie a). podziału połówkowego do wyszukiwania odpowiedniej listy inwersyjnej. Wówczas ilość porównań = log 2 k gdzie k ilość list inwersyjnych b). Przeszukiwania blokowego. Wówczas średnia liczba porównań = k Czas szukania odpowiedniej listy znacznie się wtedy zmniejsza, natomiast czas przecięcia dwóch list nie!!! Aktualizacja: nie wpływa, pod warunkiem pamiętania list pustych PORZĄDKOWANIE LIST WG CZĘSTOŚCI WYSTĘPOWANIA DANYCH DESKRYPTORÓW W PYTANIACH Czas szukania odpowiedniej listy znacznie się wtedy zmniejsza, natomiast czas przecięcia dwóch list nie!!! Wady: Metoda nie zdaje egzaminu w przypadku zadania pytania spoza zbioru standardowych pytań!!! (tak samo jak przy odcedzaniu) MODYFIKACJE zmniejszające zajętość pamięci ZAZNACZANIE PRZEDZIAŁÓW ADRESÓW Jeżeli w jakiejś liście występuje ciąg kolejnych adresów można wtedy zaznaczyć przedział poprzez znacznik i wtedy nie wpisujemy adresów wszystkich obiektów, a tylko pierwszy i ostatni adres danego ciągu. Np.: L(d1)={1, 2, 3, 4, 5, 8, 12, 13, 14, 15, 16, 20} L (d1)={1 5, 8, 12 16, 20}
-Czas wyszukiwania jest krótszy -zmniejszona zajętość pamięci Aktualizacja: skomplikowana ze względu na konieczną zmianę przedziałów LISTY DLA PAR DESKRYPTORÓWZ ZAZNACZENIE CZĘSCI WSPÓLNEJ Jeżeli mamy 2 listy L(di) i L(dj) i listy te mają pewne wspólne dla siebie adresy obiektów to: L w (d i,d j )= L(d i ) L(d j ) L r (d i )= L(d i ) \ L w (d i,d j ) L r (d j )= L(d j ) \ L w (d i,d j ) L(d i,d j )= { L r (d i ) L w (d i,d j ) L r (d j ) } Np.: L(d1)={1, 2, 5, 7, 10, 12, 13} L(d2)={3, 5, 7, 9, 10, 12, 15, 18} L w (d1,d2) = {5, 7, 10, 12} L r (d1)= {1, 2, 13} L r (d2)= {3, 9, 15, 18} L(d i,d j ) = { {1, 2, 13} {5, 7, 10, 12} {3, 9, 15, 18} } -Czas wyszukiwania jest krótszy -zmniejszona zajętość pamięci Aktualizacja: raczej prosta LISTY WIELODESKRYPTOROWE szczególne przypadek list dla par deskryptorów Jeżeli mamy 2 listy L(di) i L(dj) i listy te mają pewne wspólne dla siebie adresy obiektów to: Np.: L(d1)={1, 2, 5, 7, 8, 12, 17} L(d2)={1, 4, 5, 9, 10, 17, 20} L(d1*d2) = {1, 5, 17} -Czas wyszukiwania jest krótszy -zmniejszona zajętość pamięci Aktualizacja: bardziej skomplikowana
W przypadku list łączonych należy określić współczynnik Q, który wskazuje minimalną liczbę adresów wspólną dla dwóch list, dla których efektywne jest stosowanie tej modyfikacji, a zdeterminowane jest minimalizacją kosztów, zlikwidowanie redundancji oraz wszelkich działań niezbędnych do wyselekcjonowania z listy wspólnej adresów dotyczących danego deskryptora. L(d1 * d2 * d3 * d4)={1, 8, 12} LISTY ZREDUKOWANE: - LISTY DLA PAR DESKRYPTORÓWZ ZAZNACZENIE CZĘSCI WSPÓLNEJ - LISTY WIELODESKRYPTOROWE szczególne przypadek list dla par deskryptorów USUWANIE LIST DŁUGICH LISTY ZANEGOWANE X A1 A2 X1 2 A X2 1 A X3 2 B X4 2 A X5 2 A X6 2 A X7 2 B X8 2 A t= t1 * t2 L(1) = {x2} L(2) = {x1,x3,x4,x5,x6,x7,x8} L(a) = {x1,x2,x4,,x5,x6,x8} L(b) = {x3,x7} L(1) = {x2} L(2) = {x2} L(a) = {x3,x7} L(b) = {x3,x7} t= (A1,2) * (A2,b) t= d1 * d2 d1 = (A1,2) {x2} d2 = (A2,b) {x3, x7} б(t) = {x7} Listy muszą pochodzić z jednego atrybutu wzajemnie dwudeskryptorowego o wartościach wzajemnie się negujących któraś z wartości musi występować w opisie obiektów.
-Czas wyszukiwania 2 sposoby: np. = a1 * a2 1. szukamy a1 i przecinamy z listą dla a2 2. szukamy obiekty z a2 odjąć obiekty z a1 -zmniejszona zajętość pamięci Aktualizacja: skomplikowana TWORZENIE LIST DLA PEWNEGO POZBIORU DESKRYPTORÓW Tworzymy listy inwersyjne tylko dla wybranego podzbioru D deskryptorów, gdzie D D. Wybrany zbiór może być zbiorem deskryptorów najczęściej występujących w pytaniach do systemu S lub zbiorem deskryptorów pewnego atrybutu (pewnych atrybutów). Tworzymy listy inwersyjne (di) Gdzie: di D i di D' Ta modyfikacja powinna być omówiona przez Panią Profesor na wykładzie, więc pozwalam sobie jej już nie przypominać, choć od razu zaznaczam, że jest to jedna z najważniejszych modyfikacji metody list inwersyjnych, więc proszę się jej koniecznie nauczyć na egzamin. To samo tyczy się modyfikacji polegających na dekompozycjach systemu informacyjnego S. One także miały być omówione na wykładzie. Proszę w ramach zajęć zastanowić się nad tym, jakie zalety może wnieść każda dekompozycja dla danego systemu: czy wpłynie na czas wyszukiwania, czy na zajętość pamięci? DEKOMPOZYCJA ATRYBUTOWA. DEKOMPOZYCJA OBIEKTOWA Patrz: wykład z przedmiotu!!!!. PODSUMOWANIE Metoda list inwersyjnych jest klasyczną metodą wyszukiwania informacji - można ją stosować nie tylko dla maszyn cyfrowych. Charakteryzuje się ona szybkim czasem wyszukiwania, lecz dużą redundancją adresową, a więc dużą zajętością pamięci. Zmniejszenie redundancji można uzyskać stosując modyfikacje tej metody. Niestety, niektóre z nich poprawiając zajętość pamięci mogą wydłużyć czas wyszukiwania (np. przy tworzeniu list dla podzbioru deskryptorów). BAZA DANYCH stanowi: zbiór list inwersyjnych kartoteka wyszukiwawcza kartoteka wtórna, na którą można nałożyć pewne warunki. OPTYMALIZACJA: uporządkowanie list inwersyjnych wewnątrz (adresy obiektów należy uporządkować) Ponieważ najefektywniejsze jest przetwarzanie list od najmniejszej do największej wobec tego należy: a). Utworzyć pewną tablicę, w której przechowywalibyśmy (deskryptor, długość listy) lub (deskryptor, adres listy w kartotece wyszukiwawczej), przy czym obiekty te muszą być uporządkowane rosnąco. b). Kiedy nie stosujemy a należy uporządkować listy od najkrótszej do najdłuższej Zajętość pamięci w tej metodzie jest dużo większa niż w metodzie list prostych. Pojawia się redundancja adresowa. LISTY MOŻNA PRZETWARZAĆ RÓWNOLEGLE LUB SZEREGOWO!!!
METODA WYSZUKIW ANIA STRUKTU RA BAZY DANYCH REDUNDANCJ A I ZAJĘTOŚĆ PAMIĘCI Duża redundancja: A K T U A L I Z A C J A PYTANIA OGÓLNE CZAS WYSZUKIWANIA PYTANIA SZCZEGÓŁOWE JĘZYK WYSZUKIWA WCZY TRYB PRACY METODA KLASYCZNA konieczno ść pamiętani a list inwersyjn ych r ( d j j R 1 Złożona. N Konieczność zmiany w listach. N liczba obiektów Bardzo krótki g Dochodzi czas przecięcia list ( i g p ) i i Dowolny z wyodrębnieni em zbioru deskryptorów. Wsadowy. Realizacja ręczna, mechaniczn a, automatycz na. r liczba deskryptorów METODA ZE ZMNIEJSZO NYM ZBIOREM LIST INWERSYJN YCH Jak w metodzie klasycznej. Mniejsza liczba list. Maleje liczba r konieczność zmiany w listach przy mniejszej liczbie list. Nieco większy niż w metodzie klasycznej. Dochodzi przeglądu 0 czas Jak wyżej. Dochodzi czas przeglądu 0 Dowolny z wyodrębnieni em zbioru deskryptorów. Wsadowy. Realizacja ręczna, mechaniczn a, automatycz na. METODA DEKOMPOZ YCJI OBIEKTOW EJ pamiętani e podsyste mów i list w podsyste mach. Zmniejsza się długość list w podsystemac h konieczność zmiany w listach, dla każdego podsystemu. Krótszy czas niż w metodzie klasycznej dla jednego podsystemu. Krótszy czas niż w metodzie klasycznej dla jednego podsystemu. Dowolny z wyodrębnieni em zbioru deskryptorów. Wsadowy. Realizacja ręczna, mechaniczn a, automatycz na. METODA DEKOMPOZ YCJI ATRYBUTO WEJ pamiętani e podsyste mów i list w podsyste mach. Maleje liczba r w podsystemac h konieczność zmiany w listach, dla każdego podsystemu. Krótki czas wyszukiwania w podsystemie. Krótki wyszukiwania podsystemie. czas w Dowolny z wyodrębnieni em zbioru deskryptorów. Wsadowy. Realizacja ręczna, mechaniczn a, automatycz na.