3.4.6 R-Tree R-Tree

Werbung
3.4.6 R-Tree
•
Idee: (Guttman, 1984)
– Im Gegensatz zu den bisherigen Strukturen soll der R-Baum perfekt balanciert
sein. Wie beim B-Baum soll jeder Knoten (ausser der Wurzel) einen MindestFüllgrad aufweisen und die Blätter sollen alle auf der selben Höhe liegen.
R-Tree
Multimedia Retrieval - SS01
Kap.3-93
– Im R-Baum gibt es zwei Knotentypen:
• Blattknoten enthalten die Punktdaten. Für jedes Blatt wird zudem das
kleinste Rechteck gespeichert, welches alle Punkte des Blattes enthält
(minimum bounding region, MBR). Natürlich sollten Blätter so gewählt
werden, dass sie nur benachbarte Punkte enthalten.
• Innere Knoten umfassen entweder eine Menge von Blattknoten oder eine
Menge von inneren Knoten. Ein innerer Knoten enthält alle MBRs seiner
Kindknoten und seine eigene MBR.
– Einfügen eines neuen Punktes in den R-Baum
1. Suche einen Pfad von der Wurzel zu einem Blatt
2. Füge den neuen Punkt in den Blattknoten ein und passe evtl. die MBR des
Blattes an (falls der Punkt nicht im MBR des Blattes liegt)
3. Falls das Blatt voll ist, d.h. kein Platz für den Punkt vorhanden ist, dann teile
das Blatt in zwei neue Blätter auf. Füge die neuen Blätter in den Elternknoten
ein. Dies kann evtl. zu einem Überlauf des Elternknotens führen. In diesem
Fall wird rekursiv weiter geteilt.
4. Falls die Wurzel geteilt werden muss, dann muss ein neuer Wurzelknoten
erzeugt werden. Dabei wird die Höhe des Baumes um 1 grösser.
– Dieser Einfügalgorithmus garantiert, dass der Baum stets balanciert ist und dass
alle Knoten (ausser der Wurzel) mind. einen Füllgrad von 50% aufweisen.
Multimedia Retrieval - SS01
Kap.3-94
– Einige Punkte des Einfügealgorithmuses bedürfen weiterer Erläuterungen
• Suchen eines Pfades von der Wurzel zu einem Blatt: Da sich die MBRs der
inneren Knoten überlappen können, gibt es mehrere Möglichkeiten, um einen
Kindknoten auszuwählen.
– Falls der neue Punkt in keiner MBR enthalten ist, dann wird derjenige
Knoten selektiert, dess MBR am nächsten zum neuen Punkt liegt.
– Falls der neue Punkt in genau einer MBR enthalten ist, dann folge dem
entsprechenden Kindknoten
– Falls der neue Punkt in mehreren MBRs liegt, dann wähle einen Knoten
aus (z.B. zufällig, oder nach einer bestimmten Metrik)
Damit kann also nicht garantiert werden, dass ein neuer Punkt auch
tatsächlich in das beste Blatt eingefügt wird.
gewähltes Blatt
Auf der ersten Stufe des
Baumes (äussere Rechtecke)
scheint der neue Punkt besser
zum linken Bereich zu passen
(Punkt liegt ganz am Rande
des rechten Bereichs). Auf
Blattstufe wäre aber ein Blatt
des linken Bereichs besser.
Neuer Punkt
bestes Blatt
Multimedia Retrieval - SS01
Kap.3-95
• Aufteilen eines Blattes (splitting): Falls ein Knoten überläuft, so müssen
zwei neue Knoten konstruiert werden. Die Aufteilung der Punkte/MBRs sollte
möglichst so erfolgen, dass die MBRs der neuen Knoten disjunkt werden. Zu
diesem Zweck werden die MBRs eines Knotens entlang einer Achse geteilt
und in zwei Gruppen getrennt. Ein Optimalitätskriterium bestimmt, welche
Achse gewählt wird und wie die Gruppen zusammengesetzt sein müssen. In
der Regel führt das Aufteilen aber nicht zu disjunkten Bereichen.
– Punktsuche:
• Der Baum wird von der Wurzel zu den Blättern traversiert. Bei jedem inneren
Knoten werden all jene Kindknoten weiterverfolgt, deren MBR den Punkt
enthalten. In Blattknoten wird direkt nach dem Punkt gesucht.
• Im Gegensatz zum k-d-Tree (k-d-B-Tree) führt die Punktsuche im R-Baum
evtl. zum Besuch von mehreren Blättern (wegen der Überlappung der MBR)
– „Spatial data“
• Der R-Baum kann nicht nur Punktdaten verwalten sondern beliebige
Extensionen (z.B. Rechtecke, Polygone, Kreise, etc.). Die Blätter enthalten
dann nicht mehr Punkte sonder Rechtecke, welche die Extension der
Datenobjekte begrenzen (minimum bounding box).
•
Der R-Baum ist sehr verbreitet im GIS Bereich. Einzelne Datenbanken (Informix)
bieten den R-Baum als Indestruktur an
Multimedia Retrieval - SS01
Kap.3-96
•
Vorteile:
– Der R-Baum ist stets perfekt balanciert. Die Höhe des Baumes ist logarithmisch in
der Anzahl der Punkte.
– Die Implementierung ist optimiert für sekundäre Speicher. Z.B. können die inneren
Knoten in einem Cache im Hauptspeicher gehalten werden. Nur die Blätter
müssen von Disk geladen werden
– Gute Performanz in niedrig-dimensionalen Räumen
– Es exisitieren einige Bulkload-Operationen, welche das Aufbauen des Baumes
enorm beschleunigen
•
Nachteile:
– Die Überlappung der MBRs ist eines der grossen Probleme des R-Baums. Der RBaum sollte deshalb von Zeit zu Zeit neu aufgebaut werden (und zwar mit einem
Bulkload-Algorithmus)
– Schlechte Performanz in hoch-dimensionalen Räumen
– Grundoperationen (insert, update, delete) sind recht teuer
Multimedia Retrieval - SS01
•
Kap.3-97
R-Tree Erweiterungen
– In den letzten Jahren sind unzählige Erweiterungen/Verfeinerungen des R-Baums
publiziert worden. Das Grundkonzept des Baumes ist aber stets dasselbe. Varriert
wurden unter anderem:
• Die Form der MBRs:
– Der SS-Baum (SS: similarity search) und SS+-Baum benutzen
kreisförmige Regionen um die Ausdehnung der Knoten zu beschreiben.
– Der TV-Baum (TV: telescope vector) benutzt eine variable Anzahl von
Dimensionen für die Indxierung, d.h. die inneren Knoten „sehen“ nur die
wichtigsten Komponenten der Vektoren darunter. Wie der SS-Baum
werden die MBRs mit Sphären beschrieben
– Der SR-Baum benutzt eine Kombination von Rechtecken und Sphären
zur Beschreibung der MBRs.
• Splitting:
– Der SS+-Baum verwendet einen Clusterungsalgorithmus (k-means), um
den übervollen Knoten aufzuteilen
– Der R*-Baum teilt einen Knoten analog zum R-Baum. Um die
Überlappung der MBRs zu verkleineren, wird bei jedem Aufteilen eines
Blattknotens ein Teil der Punkte neu eingefügt
– Der X-Baum teilt die Knoten so auf, dass (fast) keine Überlappungen
entstehen.
Multimedia Retrieval - SS01
Kap.3-98
• Seitengrösse der Knoten:
– Der X-Baum verwendet sogenannte Superknoten. Falls sich ein split nicht
lohnt (Überlappung zu gross), dann wird der Knoten nicht geteilt sondern
auf mehreren Seiten gespeichert (overflow buffer)
– Noch einen Schritt weiter geht der DABS-Baum. Bei jedem Überlauf wird
mit Hilfe eines Kostenmodells überprüft, welche Seitengrösse optimal für
einen Knoten ist.
• Metrik:
– Während alle bisher besprochenen Bäume nur für d-dimensionale Räume
mit einer Ls-norm verwendet werden können, bietet der M-Baum eine
hierarchische Struktur für beliebige Metriken an. Die gespeicherten
Objekte müssen nicht mal Punktdaten sein. So kann der M-Baum auch
mit Strings und „Edit-Distance“ umgehen.
Multimedia Retrieval - SS01
Kap.3-99
Übersicht der R-Baum Erweiterungen
•
R-Tree
[Guttman:1984]
•
R+-Tree [Sellis:1987]
– nur nicht-überlappende MBRs auf der selben Indexhöhe; zu diesem Zweck
können Objekte mit einer Fläche>0 auf mehrere Knoten verteilt werden, d.h. die
Objekte werden in mehreren Blättern redundant gespeichert
•
R*-Tree
[Beckmann:1990]
– bessere Splitting Strategie im Vergleich zu R- und R+-Baum
– Bei jedem split wird ein Teil der Datenobjekte erneut eingefügt; diese
Restrukturierung führen zu einer weiteren Verkleinerung der Überlappung der
MBRs
•
P-Tree
[Jagadish:1990]
– Beim Splitting können die Knoten nicht nur entlang der Achsen geteilt werden,
sondern auch entlang weiterer m Richtungen.
– MBRs werden durch Polygone beschrieben; die Seitenflächen liegen orthogonal
zu einer der m Richtungen oder einer der Achsen
•
TV-Tree [Faloutsos:1994]
– In inneren Knoten werden die Vektoren durch niedrig-dimensionale Vektoren
approximiert (eine Art Dimensionsreduktion). Dadurch soll es möglich werden,
auch sehr hoch-dimensionale Daten zu indexieren.
Multimedia Retrieval - SS01
Kap.3-100
•
vp-Tree [Chiueh:1994]
– Der vp-Tree ist ein binärer Suchbaum, der rekursiv von der Wurzel zu den Blättern
aufgebaut wird (top-down).
– In jedem Knoten wird ein so genannter vantage point ermittelt. Die Datenpunkte
werden in Abhängigkeit ihrer Distanz zum vantage point in zwei Gruppen
aufgeteilt, d.h. in eine Gruppe mit Distanzen kleiner der Median-Distanz und in
eine Gruppe mit Distanzen grösser der Median-Distanz. Die zwei Gruppen bilden
die neuen Kindknoten und werden rekursiv weiter geteilt bis die Knoten genügend
klein sind.
•
X-Tree [Berchtold:1996]
– Verbesserter Splitting-Algorithmus (fast keine Überlappungen der MBRs mehr)
– Optimierte Disk-Organisation für hoch-dimensionale Räume; Falls sich ein split
nicht lohnt (resultierende Knoten haben eine zu starke Überlappung) werden die
Knoten zu so genannte Super-nodes umgewandelt. Ein Super-node kann auf
mehreren Diskseiten liegen
•
SS-Tree [White:1996]
– Der SS-Baum verwendet wie der R*-Baum eine re-insertion strategy, um die
Überlappung der MBRs zu verkleinern (welche leicht unterschiedlich ist).
Desweiteren werden sphärische MBRs benutzt.
•
SS+-Tree [Kurniawati:1997]
– Eine Erweiterung des SS-Baums, welche im Durchschnitt kleinere MBRs für die
Knoten benutzt. Bei der Teilung wird ein Clusterungs-Algorithmus angewendet.
Multimedia Retrieval - SS01
Kap.3-101
•
SR-Tree [Katayama:1997]
– Der SR-Baum ist eine Mischung des R*-Baumes und des SS-Baumes. Die MBRs
werden mit Hilfe von Rechtecken und Sphären bestimmt, d.h. die MBRs werden
durch den Schnitt von Rechteck und Sphäre beschrieben.
•
M-Tree [Ciaccia:1997]
– Der M-Baum eignet sich nicht nur für Vektorräume mit einer Lp-Norm, sondern
kann beliebige Objekte, für die eine Metrik definiert wurde, verwalten. In einem
Vektorraum mit L2-Norm sieht der M-Baum wie ein SS-Baum aus.
•
DABS-Tree [Böhm:2000]
– Verfeinert das Konzept der Super-nodes im X-Tree. Ein Knoten muss nun nicht
mehr auf eine Diskseite passen, sondern kann auf mehrere, nacheinander
liegenden Seiten abgespeichert werden. Die optimale (in Bezug auf Suchkosten)
Grösse der Knoten wird mit Hilfe eines Kostenmodells ermittelt.
•
GiST [Hellerstein:1995]
– Der generalized search tree ist ein Framework für multi-dimensionale
Indexstrukturen. Die Implementierung übernimmt die ganze Verwaltung (inkl.
Diskorganisation); der Benutzer muss nur noch die Index spezifischen Merkmale
hinzufügen (z.B. splitting, Format der Datenobjekte, Format der inneren Knoten,
re-insertion Strategie)
Multimedia Retrieval - SS01
Kap.3-102
3.4.7 Andere hierarchische Indexstrukturen
•
Pyramid-Tree [Berchtold:1998]
– Der Pyramid-Baum ist ein auf die L∞-Norm optimierter Index. Der Datenraum wird
durch Pyramiden aufgeteilt, deren Grundfläche einer Aussenfläche des
(rechteckigen) Datenraums entsprichen und deren Spitzen sich in einem Punkt im
Raum treffen. Jede Pyramide wird entlang der Falllinie von Spitze zu Grundfläche
in mehrere Scheiben aufgeteilt. Wie bei den space-filling curves kann mit Hilfe
dieser Scheiben und einer geeigneten Nummerierung eine Abbildung der Punkte
auf einen ein-dimensionalen Bereich definiert werden.
•
P-Sphere Tree [Goldstein:2000]
– Der P-Sphere Baum hat eine zweistufige Struktur: die Wurzel enthält eine Menge
von sphärischen MBRs; jede MBR repräsentiert eine Menge von Punkten, welche
in den Blattknoten gespeichert sind.
– Im Gegensatz zu allen bisher besprochenen Ansätzen kann ein Punkt in mehreren
Blättern gespeichert sein, d.h. der P-Sphere Baum nimmt Redundanzen in Kauf.
Auf der anderen Seite sind die Blätter und deren MBRs so gross, dass nur noch
sehr wenige Blätter bei der NN-Suche betrachtet werden müssen. Mit anderen
Worten, die eingeführte Redundanz soll die Suchzeiten reduzieren.
– Der P-Sphere Tree ist, gemäss Messungen, eine gute Alternative für Räume mit
10-100 Dimensionen.
Multimedia Retrieval - SS01
Kap.3-103
3.4.8 NN-Suche in hierarchischen Strukturen
•
•
Hjaltson und Samet haben 1995 einen allgemein gültigen Algorithmus vorgestellt, der
eine optimale NN-Suche in Bäumen ausführt. Optimal heisst hierbei, dass die Anzahl
besuchter Blätter und damit auch die Anzahl gelesener Seiten minimal ist.
Der Algorithmus verwendet eine Priority-Queue für die Knoten und Punkte. Die
Priorität ist dabei gegeben als der minimale Abstand des Anfragepunktes zur MBR des
Knotens resp. zum Punkt (aufsteigend geordnet, d.h. zuoberst ist der Knoten/Punkt
mit kleinster Distanz). Die Knoten/Punkte werden dann in dieser Reihenfolge besucht.
Für einen gegebenen Anfragepunkt wird der nächste Nachbar wie folgt ermittelt:
1. Initialisierung: der Wurzelknoten wird in die Queue eingefügt
2. Solange die Queue nicht leer ist
a) Lese das oberste Element und entferne es aus der Queue
b) Falls das oberste Element ein innerer Knoten ist, dann füge alle Kindknoten
in die Queue ein. Die Priorität der Kindknoten ist gegeben als minimale
Distanz zwischen Anfragepunkt und MBR des Kindknotens.
c) Falls das oberste Element ein Blattknoten ist, dann füge alle Punkte in die
Queue ein. Die Priorität der Datenpunkte ist durch die Distanz zwischen
Anfragepunkt und Datenpunkt gegeben.
d) Falls das oberste Element eine Punkt ist, dann ist dies der NN zum
Anfragepunkt und die Suche kann abgebrochen werden.
Multimedia Retrieval - SS01
Kap.3-104
•
Beweis der Korrektheit
– Die Prioritäten in der Queue entsprechen den minimalen Distanzen zwischen dem
Anfragepunkt und der MBR des Knotens resp. den Distanzen zwischen
Anfragepunkt und Datenpunkten.
– Wegen der Konstruktion der MBRs muss gelten: die Prioritäten der Kindelemente
eines Knotens ist stets grösser (gleich) wie diejenige des Knotens.
– Falls also ein Datenpunkt zu oberst in der Queue liegt, so bedeutet dies, dass alle
nicht besuchten Knoten weiter entfernt liegen. Damit sind aber auch alle Punkte
unterhalb dieser Knoten weiter entfernt und können somit nicht der nächste
Nachbar zum Anfragepunkt sein.
•
Beweis der Optimalität
– Angenommen wir kennen den nächsten Nachbar bereits. Dann können wir einen
Kreis mit Mittelpunkt=Anfragepunkt durch den
nächsten Nachbar legen. Der Kreis heisst NNSphäre (NN-sphere) und enthält genau einen
NN-dist
Datenpunkt – den nächsten Nachbar (siehe Figur).
– Ein optimaler Algorithmus muss nun all jene Knoten
des Baumes betrachten, deren MBR sich mit dieser
NN-Sphäre schneidet, um sicher zu sein, dass der
NN-sphere
gefundene Punkt der NN ist.
Multimedia Retrieval - SS01
Kap.3-105
•
Beweis der Optimalität (Forts.)
– Alle Knoten, deren MBR sich nicht mit der NN-Sphäre schneidet müssen nicht
betrachtet werden, da sie unmöglich den nächsten Nachbar enthalten können.
– Der HS-Algorithmus betrachtet Knoten mit aufsteigender minimalen Distanz zum
Anfragepunkt. Falls ein Datenpunkt zu oberst in der Queue liegt, dann wurden nur
jene Knoten betrachtet, welche eine kleinere Distanz zum Anfragepunkt hatten als
dieser Datenpunkt. Mit anderen Worten, es wurden nur Knoten betrachtet, deren
MBR sich mit der NN-Sphäre schneidet. Die Knoten, deren MBR sich nicht mit der
NN-Sphäre schneiden, liegen alle noch in der Queue (resp. deren Elternknoten
liegen noch in der Queue). Somit betrachtet der HS-Algorithmus genau jene
Knoten, welche auch ein optimaler Algorithmus lesen muss.
•
Bemerkungen
– Der HS-Algorithmus muss in der Regel mehrere Blätter lesen bis der NN gefunden
werden kann (auch wenn die MBRs der Blätter sich nicht überlappen)
– Da der HS-Algorithmus genau jene Blätter liest, deren MBRs sich mit der NNSphäre schneiden, kann man die Kosten der NN-Suche relativ gut abschätzen. Es
gibt eine Anzahl von Modellen, welche zuerst die erwartete NN-Distanz schätzen
und dann die zu erwartende Anzahl Blattknoten bestimmen, die gelesen werden
muss. Damit ist es möglich, die Kosten schon vor der Suche abzuschätzen; dies
ist vor allem für Query-Optimizer wichtig.
Multimedia Retrieval - SS01
Kap.3-106
3.4.9 Fluch der hohen Dimensionen
•
•
Ein Grund für die Flut von Indexstrukturen für multi-dimensionale Daten ist die
schlechte Performanz der Methoden in hoch-dimensionalen Räumen. Das
Hauptproblem liegt darin, dass die Indexstrukturen für 2/3-dimensionale Probleme
konstruiert und dann auf höher dimensionale Probleme übertragen wurden. Dabei
wurde häufig nicht berücksichtig (oder zu wenig konsequent), dass ein hochdimensionaler Raum sich völlig anders verhält als ein 2/3-dimensionaler Raum.
Im Folgenden wollen wir das Phänomen des „Fluch der hohen Dimensionen“ näher
betrachten, also das Problem, dass die Indexstrukturen zwar sehr gut in 2/3dimensionalen Räumen funktionieren, aber in hoch-dimensionalen Räumen komplett
versagen. Wir tun dies, indem wir uns zuerst einige Eigenheiten des hochdimensionalen Raumes vergegenwärtigen und schliesslich mit einem (einfachen)
Kostenmodell belegen, dass NN-Suche in hoch-dimensionalen Räumen nicht effizient
sein kann, wenn man hierarchische Strukturen verwendet.
•
Annahmen: Zur Vereinfachung der mathematischen Betrachtung nehmen wir im
Folgenden an, dass der Raum durch Ω = [0,1]d gegeben ist und dass Datenpunkte und
Anfragen uniform im Datenraum verteilt sind.
•
Beobachung: Unter diesen Annahmen ist die W‘keit, dass ein Punkt innerhalb einer
Region liegt, gegeben durch das Volumen dieser Region.
Kap.3-107
Multimedia Retrieval - SS01
1. Eigenheit: Schlechte Intuition für hoch-dimensionale Räume
•
•
•
Gegeben sei
– Datenraum: Ω = [0,1]d
– Zentrum von Ω : c = (0.5, …, 0.5)
– Punkt p = (0.3, ... , 0.3)
– Kreis um p mit Radius 0.7
Im 2-dimensionalen Raum (siehe
Grafik) deckt der Kreis beinahe den
ganzen Datenraum ab. Zudem ist es
klar, dass das Zentrum c innerhalb des
Kreises liegt.
Ω = [0,1]d
c
0.7
p
Im hoch-dimensionalen Raum gilt dies
nicht mehr! Der Abstand zwischen p
und c ist gegeben als: δ = 0.2 sqrt(d).
Nur falls δ ≤ 0.7 ist, wird c vom Kreis
abgedeckt. Dies ist aber nur für
d < (0.7/0.2)2 = 12.25 der Fall. D.h. in
hoch-dimensionalen Räumen ist der
Kreis zu klein, um c zu überdecken!
Multimedia Retrieval - SS01
Kap.3-108
2. Eigenheit: Partitionierung in hoch-dim. Räumen nicht möglich
•
Gegeben sei
– Datenraum: Ω = [0,1]d
– Nach oben beschränkte Anz. Punkte, z.B. N = 109
•
In 2-dimensionalen Räumen kann der Datenraum z.B. partitioniert werden, indem
man jede Achse mehrfach teilt (z.B. k-d-Tree, Gridfile, ...). Die entstehenden
Partitionen sind recht klein und die räumliche Aufteilung macht Sinn.
•
In hoch-dimensionalen Räumen ist dies aber nicht mehr der Fall! Nehmen wir an,
dass jede Achse genau einmal geteilt wird (z.B. in der Mitte). Dann können wir
folgende Grössen berechnen:
– Anz. Partitionen:
p = 2d
– Anz. Punkte/Partition: m = N/2d
d
p
m
10
50
100
103
1015
1030
106
10-6
10-24
D.h. im hoch-dimensionalen Räumen sind die meisten Partitionen leer. Eine
Partitionierung macht also keinen Sinn mehr. Um das Problem zu entschärfen, sollten
nur eine relativ kleine Anzahl Achsen geteilt werden (z.B. 10 Achsen).
Kap.3-109
Multimedia Retrieval - SS01
3. Eigenheit: Wo liegen die Datenpunkte?
•
•
•
Gegeben sei
– Datenraum: Ω = [0,1]d
– Ein rechteckiger Bereich mit
Seitenlänge s = 0.95 (siehe Grafik)
In 2-dimensionalen Räumen liegen die
Datenpunkte gleichmässig über den
Datenraum verteilt. Bei N=109 Punkten
ist der Datenraum dicht belegt. Der
rechteckige Bereich enthält sehr viele Punkte.
Ω = [0,1]d
s
s
Im hoch-dimensionalen Räumen ist der
Bereich fast leer! Das Volumen des Bereichs
ist gegeben durch sd. Bei d = 100 ist dies gerade mal 0.0059. D.h. 0.59% der Punkte
liegen in diesem Bereich. Des weiteren kann man keine Punkte im Zentrum des
Datenraums finden. All Punkte liegen in der Nähe einer der Seitenflächen des
Raumes. „In der Nähe“ heisst dabei, dass der Abstand zur Aussenfläche kleiner als
ε = 0.05 ist. Die W‘keit, dass ein Punkt in der Nähe einer Aussenfläche liegt, ist
gegeben durch 1 - ( 1-2ε ) d.
– für d = 2 ist diese W‘keit 0.19, d.h. 19% der Punkte liegen nahe am Rand
– für d = 100 ist diese W‘keit 1, d.h. alle Punkte liegen jetzt nahe am Rand
Multimedia Retrieval - SS01
Kap.3-110
4. Eigenheit: Der NN ist in hoch-dimensionalen Räumen weit entfernt
•
Gegeben sei
– Datenraum: Ω = [0,1]d
– Nach oben beschränkte Anz.
Punkte, z.B. N = 109
– Zentrum von Ω : c = (0.5, …, 0.5)
– Kreis um c mit Radius 0.5
Ω= [0,1]d
0.5
c
•
In einem 2-dimensionalen Raum
erwarten wir, dass der NN eines
Punktes in unmittelbarer Nähe liegt
(d.h. die Distanz ist klein). So würde
der Kreis um c sicher den NN zu c
enthalten.
•
In einem hoch-dimensionalen Raum ist dies aber nicht der Fall! Das Volumen der ddim. Sphäre geht gegen 0 mit zunehmendem d. Für d = 10 ist das Volumen 0.002, d.h.
0.2% der Punkte liegen innerhalb der Sphäre. Für d = 100 ist das Volumen 1.9*10-70,
d.h. neben c liegt mit grösster W‘keit kein weiterer Punkt in der Sphäre. Mit anderen
Worten, der Kreis um c müsste grösser sein, um den NN zu enthalten resp. die
Distanz von c zu seinem NN ist sehr viel grösser als 0.5!
Multimedia Retrieval - SS01
Kap.3-111
Kostenmodell für NN-Suche
•
Auf den folgenden Seiten wollen wir die Kosten für die NN-Suche in hierarchischen
Strukturen schätzen. Zu diesem Zweck müssen wir uns erst überlegen, wie gross die
erwartete Distanz zwischen NN und Anfragepunkt ist. Danach müssen wir die Anzahl
der Blätter bestimmen, welche während der Suche gelesen wird. Da wir den HSAlgorithmus anwenden, können wir die Anzahl gelesener Blätter relativ leicht
abschätzen: gelesen werden müssen genau jene Blätter, welche die NN-Sphäre um
den Anfragepunkt schneiden.
•
Erwartete NN-Distanz
– Die erwartete NN-Distanz ist gegeben als die durchschnittliche Distanz zwischen
einem Anfragepunkt und seinem nächsten Nachbar.
– Grundidee der Herleitung:
• Für einen gegeben Anfragepunkt und einen Radius r bestimmt man die W‘keit,
dass der NN innerhalb des Kreises um den Punkt mit Radius r liegt.
• Für die Zufallsvariable r definieren diese W‘keiten eine Verteilungsfunktion;
der Erwartungswert der Zufallsvariable r ist gerade die erwartete NN-Distanz
für den gegebenen Anfragepunkt
• Die erwartete NN-Distanz für eine beliebigen Punkt im Datenraum ist letzlich
der Mittelwert der erwarteten NN-Distanz für alle Punkte im Datenraum.
Multimedia Retrieval - SS01
Kap.3-112
– Natürlich hängt die erwartete NN-Distanz von der Metrik und der Dimensionalität
des Raumes ab. Die folgenden Kurven zeigen den Verlauf der NN-Distanz in
Abhägnigkeit der Dimensionalität für die Normen L1 , L2 und L∞.
Multimedia Retrieval - SS01
•
Kap.3-113
Kostenmodell
– In einem einfachen Kostenmodell werden die Kosten der NN-Suche wie folgt
abgeschätzt:
• CPU-Kosten sind vernachlässigbar im Vergleich zu den IO-Kosten
• IO-Kosten fallen nur beim Besuch eines Blattknotens an, d.h. die inneren
Knoten werden im Hauptspeicher gehalten. Das Lesen eines Blattes bewirkt
einen „zufälligen“ Zugriff (random access) auf die Harddisk. Dieser kostet mit
heutiger Disktechnologie zwischen 5-8ms.
– Um die Performanz eines Baumes zu vergleichen, betrachten wir auch die Kosten
für das sequentielle Durchgehen aller Punkte (sequentieller Scan). Auch hierbei
fallen die CPU-Kosten nicht ins Gewicht; die IO-Kosten sind gegeben durch das
Lesen aller Vektoren. Heutige Disks haben Datentransferraten zwischen 10 und
30 MB/s (RAIDs können sogar noch mehr MB/s übertragen). Die Anzahl zu
lesender Blöcke ist kleiner als die Anzahl Blätter in einem Baum. Im Durschnitt ist
nämlich ein Blatt nur zu etwa 60%-80% voll (nach einem split sind es 50%). Sei f
(in %) der durchschnittliche Füllgrad und b die Grösse eines Blattes in Bytes. Dann
sind die Kosten für NN-Suche mit dem seq. Scan: Tscan ≈ f ⋅ n ⋅ b / (16 MB/s)
– Mit dem HS-Algorihtmus werden bei einer NN-Suche in einem Baum genau jene
Blätter besucht, welche sich mit der NN-Sphäre schneiden. Sei n die totale Anzahl
Blätter und v der Prozentsatz der gelesenen Blätter. Dann sind die Kosten für die
NN-Suche im Baum: Tbaum ≈ v ⋅ n ⋅ (7ms + b / (16 MB/s))
Multimedia Retrieval - SS01
Kap.3-114
– Damit nun der Baum schneller ist als der seq. scan muss gelten:
Tbaum < Tscan
Also
v < f ⋅ b / (16 MB/s) / (7ms + b / (16 MB/s))
– Die untenstehende Grafik zeigt die oberen Schranken für v (Prozentsatz gelesener
Blätter) als Funktion der Blattgrösse und der Füllrate. D.h. bei vernünftiger
Blockgrösse und realistischem Füllgrad sollte v kleiner als 20% sein. In diesem
Fall ist der Baum aber nur unwesentlich schneller als der Scan. Damit sich der
Baum wirklich lohnt für die NN-Suche, sollte v wesentlich kleiner sein, z.B. v <5%.
Kap.3-115
Multimedia Retrieval - SS01
– Einfache Betrachtung:
• Der Baum benutze rechteckige MBRs. Es können aber nur d‘ von d Achsen
geteilt werden. Weiter nehmen wir an, dass die Aufteilung in der Mitte
vorgenommen wurde. Damit sehen die MBRs der Blattknoten wie in der Grafik
unten rechts aus (Achse nach vorne wurde nicht geteilt, die anderen in der
Mitte).
• Sei lmax der maximale Abstand eines Punktes zu einem Blatt. Aufgrund der
MBR-Form der Blätter ist diese Distanz gegeben als: lmax=½ sqrt(d’2)
• Wenn wir nun diese Distanz mit der erwarteten NN-Distanz vergleichen, so
stellen wir überraschend fest (siehe Tabelle): lmax ist bei d=100 kleiner als NNDist. Mit anderen Worten: jeder Punkt liegt
näher zu diesem Blatt als zu seinem NN. Also
schneidet die MBR des Blattes auch die NNΩ = [0,1] d
Sphäre jedes Anfragepunktes. Das Blatt muss
für jede Anfrage gelesen werden. Oder: für jede
Anfrage muss jedes Blatt besucht werden
d
N
40 106
100 106
Multimedia Retrieval - SS01
d‘
lmax
NN-dist
14
15
1.87
1.94
1.8
3
lmax
Blattseite
Kap.3-116
– Allgemeine Betrachtung:
• Wir wollen nun die genaue Anzahl besuchter Blätter berechnen; zudem
betrachten wir nun auch allgemeine MBRs.
• Wir müssen die Anzahl Blätter bestimmen, deren MBRs sich mit der NNSphäre eines Anfragepunktes schneiden. Dazu gehen wir wie folgt vor
– Schätzen der erwarteten NN-Distanz (siehe vorherige Grafiken)
– Die NN-Suche kann als Bereichsanfrage („range query“) umformuliert
werden: gesucht sind nun all jene MBRs, welche sich mit der NN-Spähre
schneiden.
– Aus der Geometrie (z.B. Legen einer Tangente an zwei Kreise) kennt man
das Verfahren der Minkowski Transformation. Dabei wird die NN-Sphäre
auf einen Punkt geschrumpft und alle MBRs um den Radius der NNSphäre „aufgeblasen“ (d.h. eine Sphäre mit Radius NN-Dist wird entlang
der gesamten Oberfläche der MBRs bewegt. Der Raum, der durch diese
Bewegung abgedeckt wird, entspricht gerade der aufgeblasenen MBR).
Aus der Bereichsanfrage wurde nun eine Punktanfrage: all jene Blätter
müssen besucht werden, deren aufgeblasene MBR den Anfragepunkt
enthalten.
– Die W‘keit, dass ein Blatt besucht werden muss ist gegeben durch das
Volumen seiner aufgeblasenen MBR, d.h. dem Prozentsatz der Punkte,
welche innerhalb der aufgeblasenen MBR liegen.
Kap.3-117
Multimedia Retrieval - SS01
Transformation im Überblick
aufgeblasene MBR
NN
Anfragepunkt
point query
NN query
NN-dist
NN-Sphäre
range query
Multimedia Retrieval - SS01
Kap.3-118
• Die Berechnung der Volumen der aufgeblasenen MBRs sei an dieser Stelle
ausgelassen (Interessierte finden dies unter [Weber:1998]).
• Die folgenden Grafiken zeigen v, den Prozentsatz gelesener Blätter, als
Funktion der Dimensionalität und für verschiedene MBRs (rechteckig,
sphärisch; alle anderen Formen können ebenfalls in [Weber:1998]
nachgelesen werden). Bei den rechteckigen MBRs repräsentieren „d‘=10“ und
„d‘=18“ MBRs, welche entlang d‘ Achsen in der Mitte geteilt wurden.
„conservative“ steht für rechteckige MBRs, welche bzgl. ihrer Grösse optimiert
wurden (was aber in der Praxis kaum möglich ist).
Multimedia Retrieval - SS01
•
Kap.3-119
Bemerkungen:
– Die 20%-Marke, oberhalb derer ein seq. Scan mit Sicherheit besser ist als ein
Baum, wird bereits bei Dimensionalitäten <50 erreicht. Mit anderen Worten, die
Verwenung von Bäumen für die NN-Suche in Bilddatenbanken (d>100) ist
zwecklos (resp. verlangsamt die Suche im Vergleich zum seq. Scan)
– Für jede hierarchische Struktur (egal welche MBRs, egal wie aufgebaut) gibt es
eine Dimensionalität, oberhalb derer die NN-Suche mit einem seq. Scan
schneller ist.
– Messungen mit realen Datensätzen (Merkmale aus Bilddatenbanken) haben
gezeigt, dass der seq. Scan schon bereits ab d=10 schneller sein kann als alle
bisher besprochenen Verfahren.
– Die NN-Suche in hoch-dimensionalen Räumen hat lineare Komlexität, solange die
Anzahl Punkte nicht exponentiell mit der Anzahl Dimensionen wächst (dies ist
aber in Datenbanken nicht gegeben). Dies kann man auch mit weiteren
mathematischen Modellen zeigen.
– Die Entwicklung der Harddisks zeigt, dass der Datendurchsatz sich stärker
verbessert als die mittlere Zugriffszeit. D.h. die Bäume verlieren mit jeder neuen
Diskgeneration weiter an Boden im Vergleich zum seq. Scan.
– Also: Für die Ähnlichkeitssuche in Bilddatenbank sollte man am besten eine
sequentielle Organisation wählen. Dies ist erstens sehr viel einfacher als ein Baum
und zweitens auch wesentlich schneller.
Multimedia Retrieval - SS01
Kap.3-120
3.4.10 Das Vector Approximation File (VA-File)
•
•
•
Das Vector Approximation File (VA-File) wurde 1997 an der ETH entwickelt. Das Ziel
dieser NN-Suchmethode war es, den notwendigen Scan durch die Punktemenge zu
beschleunigen. Zu diesem Zweck wurden die Vektoren quantisiert, um die zu lesende
Datenmenge zu reduzieren (bis zu Faktor 8). Trotz des Datenverlustes kann das VAFile den exakten NN zum Anfragepunkt finden. Die Suchzeiten sind in der Regel 4-8
mal kleiner als jene des seq. Scan (wiederum ist IO das Hauptproblem; die CPU
Kosten sind im Vergleich vernachlässigbar).
In diesem Kapitel wollen wir den Aufbau und die Arbeitsweise des VA-Files genauer
studieren.
Aufbau:
– Das VA-File besteht aus zwei Dateien. Die eine Datei enthält alle Vektoren (resp.
Datenpunkte), die andere enthält die Approximationen der Vektoren. Wichtig ist,
dass die Ordnung der beiden Dateien identisch ist, d.h. der Eintrag an der i-ten
Position im Approximationsfile gehört zum i-ten Vektor im Vektorfile.
– Ein Eintrag im Vektorfile setzt sich zusammen aus einer OID (4 bytes) und den d
Komponenten des Vektors (jeweils 4 Bytes). Die OID wird von der
darüberliegende Applikation benötigt, um die Vektoren in Relation zu den
Objekten (z.B. Bilder) zu bringen.
– Ein Eintrag im Approximationsfile ist ein Bitstring mit einer bestimmten Länge
(durch 2 Bytes teilbar). Der genaue Aufbau wird in Kürze beschrieben.
Multimedia Retrieval - SS01
Kap.3-121
– Headers: Jede Datei speichert in ihrem Header wichtige Informationen zu den
Dateien. Z.B. die Anzahl Dimensionen, die Länge der Approximationen, die Anzahl
Einträge, etc. (siehe nachfolgende Grafik). Ein Besonderheit ist der Support für die
inkrementelle Berechnung der Mittelwerte und Standardabweichungen der
einzelnen Komponenten (xsum[i],x2sum[i]im Header der Vektordatei). Somit
lassen sich die Gewichte für die einzelnen Dimensionen leicht berechnen.
•
Operationen:
– Einfügen: In der Regel wird ein neuer Punkt am Ende eingefügt. Falls aber zuvor
Datenpunkte gelöscht wurden, so können die so entstanden Löcher gefüllt werden
(allerdings sollte diese Aufgabe von einer globalen Instanz ausgeführt werden,
damit VA-Files des gleichen Datensatzes auf verschiedenen Rechner die gleiche
Ordnung haben; dies ist vor allem für die Parallelisierung wichtig). Jedes Einfügen
hat eine Änderung des Vektors- und Approximationsfile zur Folge. Das Berechnen
der Approximation werden wir gleich näher betrachten.
– Update: Die Einträge in beiden Dateien werden entsprechend angepasst.
– Delete: Die Einträge an der entsprechenden Postion in den Dateien werden
gelöscht, d.h. auf einen speziellen NULL-Wert gesetzt. Die so entstehenden
Löcher können mit späteren Einfügeoperationen wieder gefüllt werden.
Multimedia Retrieval - SS01
Kap.3-122
Übersicht
magic number
(27182817)
num changes
(nChanges)
num bits
per dimension
(b[i])
magic number
(31415926)
Header
pos 0 1873
.21 .63 .13 .07 .94 .82
max position
(maxPos)
num dimensions
(d)
num vectors
(N)
statistical info.
on the vectors
(xsum[i],
x2sum[i])
Header
pos 0
01010110001
partitioning points
along each
dimension
(m[i] [j])
num vectors in
slices along
each dimension
(n[i] [j])
pos 21 5136
pos 21
.62 .41 .55 .23 .94 .34
vector file
00110101101
approximation file
VA-File
Kap.3-123
Multimedia Retrieval - SS01
Multimedia Retrieval - SS01
11
m[0,4]
10
m[0,3]
01
m[0,2]
00
m[0,1]
Berechung der Approximationen
– Die Vektoren werden mit einem Quantisierungsschema komprimiert. Ein (nicht
notwendigerweise gleichförmiges) Gitter teilt den Datenraum in rechteckige
Partitionen auf. Entlang jeder Achse werden 2bi Scheiben gebildet, wobei bi einer
Anzahl Bits entspricht (für jede Dimension kann eine andere Anzahl gewählt
werden). Die einzelnen Scheiben können nun mit bi Bits durchnummeriert werden
(siehe Grafik). Ebenso können für die einzelnen Partitionen Bitstrings gebildet
werden: sie setzen sich aus den Bitstrings der d Scheiben der Partition
zusammen. In der nebenvectors
stehenden Grafik sind die
1
0.6 0.8
2
0.0 1.0
Scheiben durch Markierungsy
3
1.0 0.0
data space
punkte begrenzt. Z.B. ist
4
0.3 0.4
die erste Scheibe in xm[1,4]
5
0.5 0.1
p2
Richtung begrenzt durch
11
6
0.3 0.6
p1
m[0,0] und m[0,1]. Der
m[1,3]
p6
Datenraum wird durch die
10
approximations
m[1,2]
Punkte aufgespannt, d.h.
p4
10 11
01
durch deren minimale und
00 11
m[1,1]
maximale Werte entlang
11 00
00
p5
der d Achsen (z.B. m[1,0]
p3 m[1,0]
01 01
und m[1,4] für die y-Achse)
10 00
m[0,0]
•
x
01 10
Kap.3-124
– Bestimmung der Markierungen: Entlang jeder Achse werden die Markierungspunkte so gewählt, dass jede Scheibe die gleiche Anzahl Punkte enthält. Zu
diesem Zweck berechnet man zuerst die Verteilungsfunktion entlang der Achsen
(z.B. durch Sampling einiger Punkte) und bestimmt die Markierungspunkte so,
dass das Integral über die Verteilungsfunktion für alle Scheiben gleich gross ist
(das Integral entspricht dabei der Anzahl Punkte in den Scheiben). Die untenstehende Figur zeigt eine typische Verteilungsfunktion der Komponentenwerte.
Links wurden die Scheiben gleichförmig gewählt, rechts so, dass die Anz. Punkte
pro Scheibe (ungefähr) gleich ist. Das linke Schema ist ungeeignet, da praktsich
alle Punkte in der dritten Scheibe liegen.
Multimedia Retrieval - SS01
m[j,4]
m[j,2]
m[j,3]
m[j,1]
value
m[j,0]
m[j,4]
m[j,3]
m[j,2]
m[j,1]
freq
m[j,0]
freq
value
Kap.3-125
– Bestimmung der Anzahl Bits: Grundsätzlich sollte die Anzahl Bits so gewählt
werden, dass die Approximationen möglichst klein sind, aber dennoch eine
effiziente Suche ermöglichen. Es gibt einige Modelle, wie man die Bits verteilen
sollte und wieviele Bits total verwendet werden sollen. In der Regel genügen aber
4 oder 8 Bits pro Dimension, um eine gute Suchperformanz zu erreichen.
– Berechnung der Approximation: Wie erwähnt, setzt sich die Approximation
eines Datenpunktes p aus den Bitstrings der den Punkt p enthaltenden Scheiben
entlang aller Achsen zusammen. Dabei sei a(p,j) der Bitstring (resp. die Nummer)
der Scheibe in der j-ten Dimension, welche den Punkt enthält. Offensichtlich muss
gelten
m[j, a(p,j)] ≤ pj ≤ m[j, a(p,j)+1]
Die Approximation des Punktes p ist die Konkatenation aller Bitstrings a(p,j).
•
Was nützen nun die Approximationen?
– Die Approximation eines Datenpunktes, d.h. der ihn umgebende rechteckige
Bereich, hat ein recht kleines Volumen. Falls der Datenraum [0,1]d, bi=b für alle
Dimensionen und alle Markierungen gleichförmig verteilt sind, dann ist das
Volumen einer Partition 2 -bd. Bei grossem b und d also beinahe 0. D.h. die
Approximation bedeckt nur unwesentlich mehr Volumen als der Punkt selber (im
Vergleich zu den Partitionen in einem R-Baum oder einem Grid-File).
Multimedia Retrieval - SS01
Kap.3-126
– Betrachte die Figur: Sei q ein Anfragepunkt und der Kreis repräsentiere eine
Bereichsanfrage für Euklidsche Distanz. Die Approximationen der Punkte,
repräsentiert durch die umgebenden Partitioneb, erlauben die Aussage, dass
• p1, p2 und p3 bestimmt nicht relevant für die Bereichsanfrage sind
• p4 sicher relevant für die Bereichsanfrage ist
• p5 und p6 möglicherweise relevant für die Bereichsanfrage sind
Zur Beantwortung der Anfrage müssen also alle Approximationen der
Datenpunkte gelesen werden und die Vektoren von p5 und p6, um das richtige
Resultat {p4, p6} zu bilden. Im hoch-dim.
Raum haben wir bereits gesehen, dass jede
y
hierarchische Struktur wie der seq. Scan alle
data space
Vektoren lesen muss, um eine nicht-leere
p2
Bereichsanfrage zu beantworten (NN-Suche
11
ist eine nicht-leere Bereichsanfrage!). Mit dem
p1
p
VA-File brauchen wir aber nur noch die
6
10
Approximationen (4-8 mal weniger Daten) und
p4
einige Datenpunkte zu lesen. Natürlich
01
„funktioniert“ dies nur, wenn nicht allzu viele
q
Vektoren gelesen werden müssen, d.h. höchstens
p3
00
p5
20-50 Vektoren. Andernfalls sind die Kosten für
00 01 10
11
das Lesen der Vektoren zu hoch (random access)
x
Kap.3-127
Multimedia Retrieval - SS01
– Berechnung von Schranken: Die Approximation eines Datenpunktes p erlaubt
es, eine obere (=uBnd(p,q)) und untere (=lBnd(p,q)) Schranke für die Distanz
zwischen dem Datenpunkt p und einem Anfragepuntk q zu berechnen (siehe
Grafik). Die untere (resp. obere) Schranke ist gegeben als minimale (maximale)
Distanz zwischen Anfragepunkt und Partition, welche zur Approximation des
Punktes gehört. Die Berechnung der Schranken ist z.B. für die Euklidsche Distanz
wie folgt (für andere Normen analog):
• Sei lj(p) = m[j,a(p,j)] die untere Schranke der Partition von p für die j-te Dim.
• Sei uj(p) = m[j,a(p,j)+1] die obere Schranke der Partition von p für die j-te Dim.
Dann gilt lBnd(p,q) ≤ δ(p,q) ≤ uBnd(p,q) mit
y
lBnd ( p,q ) =
uBnd ( p,q ) =
Multimedia Retrieval - SS01
 (l j ( p ) − q j )2
d −1

2
 (q j − u j ( p ))
∑
j =0 
0

2
 (u j ( p ) − q j )

∑
j =0 
(q j − l j ( p ))2

d −1
data space
q j < l j (p)
q j > u j (p)
l j (p) ≤ q j ≤ u j (p)
qj ≤
qj >
11
p
10 uBnd(p ,q )
l j (p)+ u j (p)
01
2
l j (p)+ u j (p)
00
2
lBnd(p ,q )
q
00 01
10
11
x
Kap.3-128
– Filter Bedingungen: Die folgenden Bedingungen helfen, aufgrund der
Approximationen Punkte von der Suche auszuschliessen.
• Falls r ein Suchradius ist (Bereichsanfrage) für einen Anfragepunkt q, dann ist
uBnd(p,q) ≤ r ⇒ „p in Antwort“
„p in Antwort“ ⇒ lBnd(p,q) ≤ r
lBnd(p,q) > r
⇒ „p nicht in Antwort“
Dasselbe gilt auch für eine NN-Suche. In diesem Fall ist r durch die NNDistanz von q gegeben.
• Falls der NN gesucht wird, kann man zusätzlich noch folgende Bedingung
aufstellen. Seien p und p‘ Datenpunkte und q der Anfragepunkt, dann:
uBnd(p‘,q) < lBnd(p,q)
⇒ „p nicht in Antwort“
– Suchalgorithmen:
• Die folgenden Algorithmen beschreiben wie man eine Bereichsanfrage resp.
eine NN-Suche mit dem VA-File evaluiert. Dabei beschreiben wir zwei
Lösungen für die NN-Suche: die erste Methode ist optimiert bzgl. CPU-Kosten
(NNSearchSSA), die zweite bzgl. IO-Kosten (NNSearchNOA)
• Die Algorithmen benutzen stets zwei Phasen: in der ersten Phase werden die
Approximationen gelesen und Punkte aufgrund obiger Bedingungen
ausgeschlossen. In der zweiten Phase werden die exakten Vektoren gelesen
und das Resultat berechnet.
Multimedia Retrieval - SS01
Kap.3-129
– Benötigte Funktionen/Variablen:
• ReadApxEntry(i,apx): Lesen der i-ten Approximation und speichern in apx
ReadVecEntry(i,vec): Lesen des i-ten Vektors und speichern in vec
• Q: Struktur, welche die Anfrage beschreibt; Q.query.q: Anfragepunkt; Q.query.r:
Suchradius, Q.query.k: Anzahl NN.
• GetLowerBound(apx,Q): Berechnet untere Schranke zur Anfrage für aktuelles apx
GetUpperBound(apx,Q): Berechnet obere Schranke zur Anfrage für aktuelles apx
GetDist(vec,Q):
Berechnet die Distanz zwischen vec und Anfrage
– Range Search:
FUNCTION RangeSearch(Q: RangeSearch): Answer;
VAR i:
INTEGER;
ans: Answer;
dist: REAL;
apx: BitString;
vec: Vector;
BEGIN
FOR i:=0 TO maxPos DO
IF ReadApxEntry(i,apx) THEN
/* first phase: filtering step */
IF GetLowerBound(apx,Q)<Q.query.r THEN
/* second phase: refinement step */
ReadVecEntry(i,vec);
dist:=GetDist(vec,Q);
IF dist<Q.query.r THEN ans.Add(vec,dist) END;
END;
END;
RETURN ans;
END RangeSearch;
Multimedia Retrieval - SS01
Kap.3-130
– NN-Suche (CPU optimiert)
• NNSearchSSA (SSA: simple search algorithm) ist ein einfacher Algorithmus,
um die nächsten k Nachbarn für einen Punkt zu finden.
• Es werden alle Approximationen gelesen. Zu jedem Zeitpunkt enthalten die
Arrays v[] und dst[], die k besten bisher gesehenen Punkte und deren
Distanzen zum Anfragepunkt (Kandidatenliste).
• Falls die aktuelle Approximation eine untere Schranke hat, welche kleiner ist
als die grösste in dst[] gespeicherte Distanz (=max), dann könnte der
aktuelle Punkt näher liegen als der entsprechende Punkt in v[]. In diesem
Fall muss der Vektor gelesen (ReadVecEntry) und die exakte Distanz
(GetDist) berechnet werden. Die Funktion Candidate überprüft dann, ob
der aktuelle Punkt neu zu den besten k Punkten gehört und fügt in
gegebenenfalls in die Kandidatenliste ein.
• NNSearchSSA benutzt nur die Filterbedingung
lBnd(p,q) > r
⇒ „p nicht in Antwort“
wobei r der maximalen Distanz der bisher k besten Punkte entspricht. Die
Suche ist korrekt (der tastächliche NN wird gefunden), da r stets grösser
gleich der endgültigen NN-Distanz ist. Damit werden also nur Punkte
ausgeschlossen, deren untere Schranke grösser als die NN-Distanz ist. Für
alle anderen Punkte wird die exakte Distanz bestimmt und mit Hilfe der
Kandidatenliste werden die besten k Punkte ermittelt.
Kap.3-131
Multimedia Retrieval - SS01
FUNCTION NNSearchSSA(Q: NNSearch): Answer;
VAR i:
INTEGER;
v:
ARRAY OF Vector;
apx: BitString;
ans: Answer;
max: REAL;
dist: REAL;
dst:
vec:
ARRAY OF REAL;
Vector;
/* initializes candidate set; returns MAXREAL as k-th smallest distance */
FUNCTION InitCandidate(): REAL; BEGIN
FOR i:=1 TO Q.query.k DO dst[i]:=MAXREAL; v[i].OID:=-1 END;
RETURN MAXREAL;
END InitCadidate;
/* adds a point to the candidate set; returns k-th smallest distance */
FUNCTION Candidate(p: Vector; dist: REAL): REAL; BEGIN
IF dist<dst[Q.query.k-1] THEN
dst[Q.query.k-1]:=dist; v[Q.query.k-1]:=p;
SortOnDst(v,dst,Q.query.k);
END;
RETURN dst[Q.query.k-1];
END Candidate;
BEGIN
max:=InitCandidate();
FOR i:=0 TO maxPos DO
IF ReadApxEntry(i,apx) THEN
/* first phase: filtering step */
IF GetLowerBound(apx,Q)<max THEN
/* second phase: refinement step */
ReadVecEntry(i,vec);
dist:=GetDist(vec,Q);
max:=Candidate(vec,dist);
END;
END;
/* build answer set, compute scores */
FOR i:=0 TO Q.query.k-1 DO ans.Add(v[i],dst[i]);
RETURN ans;
END NNSearchSSA;
Multimedia Retrieval - SS01
Kap.3-132
Herunterladen