26.01.2015 Views

sprawozdanie z metody list inwersyjnych

sprawozdanie z metody list inwersyjnych

sprawozdanie z metody list inwersyjnych

SHOW MORE
SHOW LESS
  • 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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!