sprawozdanie z metody list inwersyjnych
sprawozdanie z metody list inwersyjnych
sprawozdanie z metody list inwersyjnych
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
© COPYRIGHT 2004 MARCIN KARWIŃSKI & MARCIN DZIĘGIELEWSKI<br />
4 z 19<br />
Gdzie to przyspieszenie<br />
Taka budowa kartoteki powoduje dużą szybkość wyszukiwania, w przypadku, gdy mamy zapytania<br />
składające się z pojedynczych deskryptorów, co też nietrudno wywnioskować z powyższego wywodu.<br />
Wiadome jest, że w takich przypadkach kartoteka zbudowana z <strong>list</strong> <strong>inwersyjnych</strong> pozwala niezwykle<br />
szybko, jak na tak prostą metodę, znaleźć odpowiedź na pytanie zadane do systemu. Jeżeli bowiem<br />
pytamy o obiekty mające w swoim opisie określony deskryptor, to dla znalezienia odpowiedzi wystarczy<br />
znaleźć właściwą <strong>list</strong>ę inwersyjną. Obiekty podane w tej liście stanowią odpowiedź na pytanie. Ale też<br />
zwiększenie liczby deskryptorów nie powoduje dużej komplikacji obliczeń. Jeżeli bowiem pytanie<br />
dotyczy obiektów opisanych kilkoma deskryptorami, to aby otrzymać odpowiedź, należy znaleźć <strong>list</strong>y<br />
inwersyjne dla wszystkich deskryptorów występujących w pytaniu. Następnie w takich wypadkach na<br />
zbiorach odpowiedzi z pojedynczych deskryptorów wykonywana jest operacja AND lub OR. Wstawianie<br />
do zapytań operatora logicznego NOT nie wiąże się również z większym problemem obliczeniowym.<br />
Zatem dla znalezienia odpowiedzi na pytanie skierowane do systemu wystarczy wykonać pewne proste<br />
operacje na <strong>list</strong>ach <strong>inwersyjnych</strong> (czyli w zasadzie na zbiorach). Można zauważyć, ze odpowiedzi<br />
uzyskujemy rzeczywiście szybko.<br />
Aktualizacja nieco utrudniona<br />
Ponieważ obiekty pamiętane są w wielu <strong>list</strong>ach, to właśnie ta nadmiarowość danych powoduje pewne<br />
utrudnienia dla procesu aktualizacji bazy danych w stosunku do przecież niezwykle prostego w<br />
wykonaniu procesu aktualizacji bazy w systemie opartym na metodzie <strong>list</strong> prostych (w tym na wszystkich<br />
modyfikacjach). Dodanie lub usunięcie elementu z bazy danych wiąże się z modyfikacją całej kartoteki<br />
wyszukiwawczej - należy usunąć adres do tego rekordu (bądź nazwę obiektu opisywanego w danym<br />
rekordzie) z wszystkich powiązanych z nim deskryptorów.<br />
A gdzie ta inwersyjność<br />
Metoda <strong>list</strong> <strong>inwersyjnych</strong> różni się od <strong>metody</strong> <strong>list</strong> łańcuchowych i <strong>metody</strong> <strong>list</strong> prostych tym, że <strong>list</strong>y<br />
łańcuchowe nie są umieszczone w opisach elementów, ale w osobnych <strong>list</strong>ach. Na dodatek <strong>list</strong>y te nie<br />
opisują bezpośrednio obiektów, czytaj dostęp do informacji nie biegnie od obiektu do informacji a<br />
odwrotnie (stąd właśnie ta inwersyjność), tj. od wartości atrybutu do opisu obiektu, któremu funkcja<br />
informacji właśnie tą wartość przypisała. Poza tym, w poprzednim przypadku <strong>list</strong>y były generowane<br />
podczas wyszukiwania, tutaj natomiast są podane bezpośrednio.<br />
Klasycznie biorąc się z bykiem za rogi...<br />
Podobnie do MLP mamy zdefiniowany system wyszukiwania S, a więc zbiór obiektów X, atrybutów A,<br />
wartości tych atrybutów V oraz funkcja informacji ρ. Oczywiście te elementy tworzą czwórkę<br />
uporządkowaną:<br />
S = .<br />
Zakładamy, że obiekty opisane są iloczynem odpowiednich niezaprzeczonych deskryptorów. Opisy<br />
obiektów t x umieszczone są w dowolny sposób w pamięci komputera.<br />
Dodatkowo zakładamy, że mamy dużą bazę, zatem obiektom x 1 ,...,x n odpowiadają adresy n 1 ,...,n m .<br />
Utworzyliśmy zatem pewein zbiór adresów N = {n 1 ,...,n m } stosując funkcję adresującą μ w następujący<br />
sposób:<br />
μ: X → N, przy czym μ(x)=μ (y) ↔ t x = t y<br />
co należy czytać nastepująco – przypisujemy ten sam adres obiektom o takich samych opisach<br />
deskryptorowych.<br />
Tworzymy <strong>list</strong>y inwersyjne (oznaczane przez α(d i )), czyli <strong>list</strong>y adresów tych obiektów, które w swoim<br />
opisie zawierają deskryptor di (d i є t x ). Zapisujemy to jako:<br />
α(d i ) = {n 1 ,...,n z }, gdzie d i = (a i , v i ), a i є A, v i є V ai .<br />
Tworzymy tyle <strong>list</strong> <strong>inwersyjnych</strong> ile mamy deskryptorów w systemie.