Modyfikacje list inwersyjnych mają na celu walkę z dużą redundancją jak prowadzają. Już przy poprzednim temacie jedna z modyfikacji nasuwała się na myśl niejako automatycznie:
Metoda ze zmniejszonym zbiorem list inwersyjnych
Analizując przypadek z zadania 1 z poprzedniego tematu można zauważyć, że nie wszystkie atrybuty (lub ich wartości) są wykorzystywane w wyszukiwaniu, zatem nie dla wszystkich deskryptorów trzeba tworzyć listy inwersyjne. Takie listy są tworzone dla pewnego podzbioru D′⊂D deskryptorów. Taki zbiór D′ może być podstawą dla wygenerowania list inwersyjnych w zmniejszonej ilości tylko dla tych deskryptorów, które najczęściej występują w zapytaniach do systemu S lub dla deskryptorów części atrybutów, bądź nawet tylko dla niektórych wartości tych atrybutów. Tworzenie list inwersyjnych α(di), dla di∈D′ i i⋃ di=D′.
Zadanie pytania do systemu S w postaci termu t będącego sumą termów składowych powoduje uzyskanie odpowiedzi σ(t) będącej sumą odpowiedzi na termy składowe.
Przypadek 1: dj∈D′
Jeżeli wszystkie deskryptory pytania dj∈D′, to wyszukiwanie niczym nie różni się od klasycznej metody list inwersyjnych.
σ(ti)=α(d1)∩α(d2)∩...∩α(dk),dj∈D′,1≤j≤k
gdzie: k – liczba deskryptorów pytania ti.
Przypadek 2: j⋁dj∈/D′
W tym przypadku część deskryptorów nie należy do D′, dlatego wyszukiwanie jest dwufazowe. Wpierw znajdujemy obiekty (adresy) odpowiadające tym deskryptorom umieszczonym w dziedzinie D′ uzyskując odpowiedź przybliżoną zawierającą zbiór XD′.
XD′=j∈J⋂α(dj),J={j:dj∈D′,dj∈ti}
Jest oczywistym, że XD′⊇Xti. Tak otrzymany zbiór obiektów przeglądamy metodą list prostych po pozostałych deskryptorach w celu wyłonienia całkowitej odpowiedzi na zadane do systemu pytanie.
σ(ti)=Xti={x ∈XD′,ρx(ai)=vi,(ai,vi)=di∈ti⟺di∈/D′}
Przypadek 3: j⋀dj∈/D′
W sytuacji, gdy wszystkie deskryptory pytania nie należą do wydzielonej dziedziny D′ to odpowiedź znajdujemy metodą przeglądu zupełnego.
Metoda redukcji liczby list inwersyjnych pozwala znacząco zmniejszyć redundancję, ale kluczowym jest tutaj właściwy dobór które listy inwersyjne są konieczne, a z których można zrezygnować. Dokonanie złego podziału spowoduje co prawda zmniejszenie redundancji w systemie, ale wydłuży czas wyszukiwania, który w krańcowym przypadku może osiągnąć czasy otrzymywane w metodzie list prostych.
Zadanie
Dla Zadania 1 z poprzedniego tematu zaproponuj modyfikację MLI zakładając występowanie pytań wg wzoru:
t=(Wiek,sˊredni)⋅(Staz˙,duz˙y),
t=(Stanowisko,sprzedawca)⋅(Pensja,sˊrednia).
Przeprowadź zapytanie (sformalizuj) typu:
1) Znajdź wszystkich pracowników młodych stażem, zatrudnionych jako handlowiec.
2) Znajdź pracowników posiadających imię na “T” nie pracujących w księgowości.
Metoda dekompozycji obiektowej
Ta modyfikacja ma zastosowanie w systemach o dużej liczbie obiektów opisanych tymi samymi atrybutami, które można podzielić pomiędzy kilkoma mniejszymi systemami (np z powodów uwarunkowań lokalizacyjnych, kategoryzacyjnych itp.).
S =i=1⋃nSi, gdzie:
Si=<Xi,Ai,Vi,ρi>
Xi⊆X i i⋃Xi=X
ρi:Xi×A →V
ρi=ρ∣Xi
Można wtedy wyróżnić dwa przypadki wpływające na czas wyszukiwania.
Przypadek 1: Pytanie składowe do systemu dotyczy obiektów tylko jednego podsystemu Si
W takiej sytuacji odpowiedź na pytanie znajdujemy w systemie Si:
σ(ti)=j⋂α(dj)∣Xi,dlati=d1⋅d2⋅...⋅dk,1≤j≤k
Przypadek 2: Pytanie składowe do systemu dotyczy obiektów z dwu lub więcej podsystemów Si,S2,...,Sn
W sytuacji złożonej, gdzie zapytanie dotyczy kilku podsystemów odpowiedź uzyskujemy jako sumę odpowiedzi z podsystemów:
σ(ti)=j⋂α(dj)∣S1∪j⋂α(dj)∣S2∪...∪j⋂α(dj)∣Sn
lub
σ(ti)=j⋂α(dj)∣X1∪j⋂α(dj)∣X2∪...∪j⋂α(dj)∣Xn
Redundancja
Redundancja w takim systemie opisana jest wzorem:
R=Ni=1∑rα(di)∣Xi−N , gdzie:
- r – liczba deskryptorów w systemie,
- N – liczba obiektów (lub wskaźników na obiekt).
Metoda dekompozycji atrybutowej
Ten rodzaj dekompozycji jest stosowany w przypadkach gdy można wyróżnić różnych użytkowników systemu stosujących zapytania będące podzbiorem deskryptorów, czyli że każdy z nich “zazwyczaj” pyta o inne cechy (wartości atrybutów) obiektów. Wtedy można stworzyć podsystemy zawierające odpowiednio zawężone podzbiory atrybutów lub wartości atrybutów, przez co zmniejsza się ilość list w podsystemie.
W sytuacji, gdy pytania zadawane do systemu można podzielić na pewne podzbiory deskryptorowe Atrybut-wartość, system S można podzielić na podsystemy zawierające te same obiekty ale inne podzbiory atrybutów. Wtedy system S =<X,A,V,ρ> składa się z podsystemów Si i powiązany zbiór Ditak, że:
S =i⋃Si,Si=<X,Ai,Vi,ρi>
Ai⊆A oraz i⋃Ai=A
Vi⊆V
ρi:X ×Ai→Vi
ρi=ρ∣X×Ai
Listy inwersyjne αi(dj),gdziedj∈Di tworzone są osobno dla każdego podsystemu Si. Pytania składowe zadajemy do systemu i znajdujemy odpowiedź σ(t) będący sumą odpowiedzi na pytania składowe. Tutaj także możemy wyróżnić dwa przypadki:
Przypadek 1:
Zapytanie dotyczy jednego podsystemu:
ti=d1⋅d2⋅...⋅dki d1,d2,...,dk∈Di
wtedy odpowiedź jest przecięciem list inwersyjnych podsystemu Si:
σ(ti)=α(d1)∩α(d2)∩...∩α(dk).
Przypadek 2:
Zapytanie dotyczy więcej jak jednego podsystemu:
ti=d1⋅d2⋅...⋅dki d1,d2,...,dn∈Di,a dn+1,...,dk∈/Di, gdzie 1≤n ≤k
Odpowiedź na takie pytanie można uzyskać tylko jako przybliżone w systemie Si, a w tak uzyskanym zbiorze odpowiedź dokładną uzyskujemy metodą przeglądu zupełnego lub jako przecięcie (część wspólną) odpowiedzi z kilku podsystemów Si w których istnieją deskryptory powiązane z pytaniem.
σ(ti)=σ(Ti1)∩σ(ti2)∩...∩σ(tim), gdzie:
σ(ti1)=(α1(d1)∩α1(d2)∩...∩α1(dk1)∣D1,D1∈S1, oraz
σ(ti2)=(α2(d1)∩α2(d2)∩...∩α2(dk2)∣D2,D2∈S2,
są odpowiednio odpowiedziami na pytanie ti znalezionymi w podsystemach S1i S2
Należy zauważyć, że liczba deskryptorów k dla pytania ti w rozbiciu na podsystem S1i S2 może być różna. Podsumowując odpowiedź to:
σ(ti)=j=1⋂mσ(tij),
σ(tij)=(αj(d1)∩αj(d2)∩...∩αj(dkj)∣Dj,D1⊆DS1i Dj∈Sj, a m – to liczba podsystemów do których skierowano pytanie.
Redundancja
Ta metoda wnosi dużą redundancję zmniejszoną w podsystemach tylko poprzez zmniejszenie ilości list dla niektórych deskryptorów.
R=Ni=1∑rα(di)∣Dj−N , gdzie:
- r – liczba deskryptorów w systemie,
- N – liczba obiektów (lub wskaźników na obiekt).
Przykład użycia
Dany jest system S zawierający 20 obiektów odwzorowujących studentów, opisanych atrybutami A1 (płeć), A2 (ukończona szkoła średnia), A3 (średnia ocena), A4 (stypendium), A5 (miejsce zamieszkania) określonych zbiorami wartości:
- VA1={K,M} – ( kobieta, mężczyzna ),
- VA2={L,T,Z } – (liceum, technikum, liceum zawodowe ),
- VA3={N,P,D,B } – ( N ≤ 3 < P ≤ 3.3 < D ≤ 4 < B ),
- VA4={∅,S,F } – ( nie pobiera, zwykłe, naukowe ),
- VA5={DS,DR,KP} – (dom studenta, dom rodzinny, kwatera prywatna ).
Dokonano dekompozycji systemu na dwa, z których jeden dedykowano informacjom o kandydatach, drugi o świadczonej pomocy materialnej.
S1=<X,A′,V′,ρ′>X={x1,...,x20}A′={A1,A2}VA1={K,M}VA2={L,T,Z } S2=<X,A′′,V′′,ρ′′>X={x1,...,x20}A′′={A3,A4,A5}VA3={N,P,D,B }VA4={∅,S,F }VA5=DS,DR,KP
Utworzono listy inwersyjne dla systemów:
S1:
α1(K)={x1,x2,x3,x8,x9,x12,x18,x19,x20},α1(M)={x4,x5,x6,x7,x10,x11,x13,x14,x15,x16,x17},α1(L)={x1,x3,x6,x10,x12,x14,x15,x16,x17,x19,x20},α1(T)={x4,x5,x7,x8,x13},α1(Z)={x2,x9,x11,x18}.
S2:
α2(N)={x2,x4,x9,x10},α2(P)={x1x3,x5,x7,x13,x15,x16,x17,x20},α2(D)={x6,x8,x11,x14,x18,x19},α2(B)={x12},α2(∅)={x4,x8,x9,x11,x12,x15},α2(S)={x1,x2,x3,x5,x6,x7,x10,x18,x19},α2(P)={x13,x14,x16,x17,x20},α2(DS)={x1,x2,x3,x5,x11,x13,x15,x19},α2(DR)={x4,x8,x9,x16,x17,x20},α2(KP)={x6,x7,x10,x12,x14,x18}.
Do systemu zadano pytanie:
ti=(A2,T)⋅(A3,D)⋅(A4,∅)
Odpowiedź na pytanie ti można znaleźć w podsystemie S2 jako przecięcie list:
σ(ti2)=α2(D)∩α2(∅) co daje w rozpisaniu:
σ(ti2)={x6,x8,x11,x14,x18,x19}∩{x4,x8,x9,x11,x12,x15}, czyli:
σ(ti2)={x8,x11}
Następnie metodą przeglądu zupełnego sprawdzamy czy w opisach znalezionych obiektów zawierają się pozostałe składowe deskryptory pytania tj.:
x8≤tix11≰ti⇒σ(ti)=x8
Można też drugi system (S1) przeszukać korzystając z MLI, a wtedy:
σ(ti1)=α1(T), czyli:
σ(ti1)={x4,x5,x7,x8,x13}
Obie uzyskane listy obiektów z S2i S1 przecinamy przez siebie szukając części wspólnej:
σ(ti)=σ(ti1)∩σ(ti2) i uzyskujemy:
σ(ti)={x4,x5,x7,x8,x13}∩{x8,x11}, co daje nam odpowiedź:
σ(ti)={x8}.
Parametry list inwersyjnych
Struktura bazy danych
Struktura bazy danych w metodzie list inwersyjnych jest złożona i wynika z konieczności przechowywania samych opisów obiektów oraz struktury wszystkich list inwersyjnych.
Aktualizacja bazy danych
Aktualizacja opisów obiektów często wymaga usunięcia obiektów z odpowiednich list inwersyjnych, a po dodaniu/zmianie opisu obiektu umieszczeniu odniesień do niego w adekwatnych listach. W zasadzie upraszczając zagadnienie można przyjąć, że zmiana opisu obiektu, usunięcie, czy dodanie nowego wymaga reorganizacji bazy oraz wygenerowania na nowo list inwersyjnych. Poziom skomplikowania procesów związanych ze zmianą bazy danych predestynuje oparte na MLI bazy do przetwarzania wsadowego.
Czas wyszukiwania
Czas wyszukiwania w tej metodzie jest zdecydowanie najkrótszy w odniesieniu do poprzednio poznanych sposobów. W sytuacji zapytania prostego tj. zawierającego sumę deskryptorów to czas znalezienia odpowiedzi jest równy czasowi wygenerowania listy:
τ=τg
W przypadku, gdy pytanie składa się z sumy pytań składowych, czyli takich, które wymagają znalezienia części wspólnej zbiorów, to taki czas określany jest następująco:
τ=i∑(τgi+τpi), gdzie:
- τgi – czas generowania list,
- τpi – czas przecięcia list (określenia części wspólnej).