text práce - SIRET Research Group

Transkript

text práce - SIRET Research Group
Univerzita Karlova v Praze
Matematicko-fyzikální fakulta
Diplomová práce
Jiří Jakl
Externí metrické hašovaní pomocí D-indexu
Katedra softwarového inženýrství
Vedoucí diplomové práce: doc. RNDr. Tomáš Skopal, Ph.D.
Studijní obor: Datové inženýrství
2008
Rád bych poděkoval doc. RNDr. Tomáši Skopalovi, Ph.D. za vedení diplomové práce, odborné rady poskytnuté při její tvorbě i za trpělivost a ochotu.
Díky jeho vstřícnosti mohla vzniknout tato práce. Dále bych rád poděkoval
všem, kteří mi poskytovali podporu během studií. Děkuji zejména rodině,
Nadaci Charty 77 - Kontu BARIÉRY, občanskému sdružení Borůvka a občanskému sdružení Asistence.
Prohlašuji, že jsem svou diplomovou práci napsal(a) samostatně a výhradně
s použitím citovaných pramenů. Souhlasím se zapůjčováním práce.
V Praze dne 28. listopadu 2008
Jiří Jakl
Obsah
1 Úvod
7
1.1 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Organizace dokumentu . . . . . . . . . . . . . . . . . . . . . . 10
2 Indexace v metrických prostorech
2.1 Vlastnosti . . . . . . . . . . . . . . . . . . . . . . .
2.2 Metrické přístupové metody . . . . . . . . . . . . .
2.2.1 Metody globálních pivotů – AESA/LAESA .
2.2.2 Metody lokálních pivotů – M-Strom . . . . .
2.2.3 Obojetné – PM-Strom . . . . . . . . . . . .
2.3 Metriky . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Lp metriky a od nich odvozené . . . . . . .
2.3.2 Řetězcové metriky . . . . . . . . . . . . . .
2.4 Výběr pivotů . . . . . . . . . . . . . . . . . . . . .
2.4.1 Náhodný výběr . . . . . . . . . . . . . . . .
2.4.2 Náhodný výběr množin . . . . . . . . . . . .
2.4.3 Inkrementální algoritmus . . . . . . . . . . .
2.4.4 H-F algoritmus . . . . . . . . . . . . . . . .
2.4.5 Výběr vzdálených pivotů . . . . . . . . . . .
2.4.6 Výběr levných pivotů . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
15
21
24
26
28
29
32
35
36
36
36
36
37
37
3 D-Index
3.1 Principy . . . . . . . . . . . . . . . . . . . . . . .
3.2 Popis . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Parametry a vlastnosti . . . . . . . . . . . . . . .
3.4 Operace . . . . . . . . . . . . . . . . . . . . . . .
3.4.1 Stavba indexu . . . . . . . . . . . . . . . .
3.4.2 Vkládání objektů . . . . . . . . . . . . . .
3.4.3 Vyhledávání objektů . . . . . . . . . . . .
3.4.4 Rozsahové vyhledávání objektů . . . . . .
3.4.5 Vyhledávání k nejbližších sousedů objektu
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
55
61
67
68
73
74
76
78
3
.
.
.
.
.
.
.
.
.
OBSAH
4
4 Implementace
85
4.1 ATOM – Amphora Tree Object Model . . . . . . . . . . . . . 85
4.1.1 (P)M-Strom . . . . . . . . . . . . . . . . . . . . . . . . 87
4.2 D-Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5 Experimenty a měření
5.1 Datové sady . . . . . . . . .
5.2 Metodika . . . . . . . . . . .
5.3 Vliv parametrů na výstavbu
5.4 Dotazování . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
92
92
93
94
99
6 Závěr
108
A Aplikace
119
B Struktura přiloženého média
B.1 Datové sady . . . . . . . . .
B.2 Přiložené texty . . . . . . .
B.3 Sady dotazů . . . . . . . . .
B.4 Strom zdrojových kódů . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
120
. 120
. 121
. 121
. 122
Abstrakt
Název práce
Autor
Katedra (ústav)
Vedoucí diplomové práce
e-mail vedoucího
:
:
:
:
:
Externí metrické hašovaní pomocí D-indexu
Jiří Jakl
Katedra softwarového inženýrství
doc. RNDr. Tomáš Skopal, Ph.D.
[email protected]
Abstrakt : Cílem této práce bylo implementovat relativně novou datovou
strukturu D-Index, prověřit chování této metrické přístupové metody a srovnat její efektivitu s jinými indexačními metodami. Jako referenční metody
byly zvoleny M-Strom, PM-Strom a LAESA (aproximovaná pomocí
PM-Stromu, který obsahuje pouze listové pivoty). Měření výkonu a porovnání bylo provedeno na různých typech dat s odlišnou distribucí vzdáleností.
V této práci je struktura D-Indexu navržena pro podporu automatické výstavby indexu podle počátečního nastavení parametrů a dynamického vkládání. Mimo samotné implementace D-Indexu byly prověřeny i vlastnosti této
indexační metody. Pro dosažení potřebné flexibility a dostatečného výkonu
řešení bylo v průběhu návrhu a implementace kladeno velké úsilí na optimalizaci a objektovou realizaci. To umožňuje zkoušení nových způsobů volby
interních parametrů a naměření relevantních výsledků metody. Jako část popisu metrických přístupových metod byly uvedeny jejich společné principy
založené na vlastnostech metrických prostorů. Práce pokryla vybrané metrické funkce, metody volby pivotů a některé problémy metrických přístupových metod.
Klíčová slova : D-Index, Indexace, Externí hašování, Metrické přístupové
metody, ρ-rozdělující funkce
Title
Author
Department
Supervisor
Supervisor’s e-mail address
:
:
:
:
:
External Metric Hashing using the D-index
Jiří Jakl
Department of Software Engineering
doc. RNDr. Tomáš Skopal, Ph.D.
[email protected]
Abstract : The goal of this work was to implement recently presented data
structure D-Index, to investigate behaviour of this metric access method and
to compare its efficiency with other indexing methods. As reference, M-Tree,
PM-Tree and LAESA (approximated as PM-Tree with leaf pivots only) indexing methods were chosen. Performance measurements and comparison
were done on various types of data with different distribution of distances.
In this work, the D-Index structure was designed to support automatic build
up of the index according to initial parameter setup and to allow dynamic
insertion as well. Beside implementation of D-Index, an investigation of features of this indexing method was done. To achieve flexibility and sufficient
performance of the solution, great effort was put on optimization and object
realization. This allowed testing new ideas for choosing internal parameters
and obtaining relevant results from measuring of investigated methods. The
common principles (based on properties of metric spaces) of metric access
methods were presented as part of their description. This work covered selected metric functions, several pivot selections and some flaws of metric access
methods.
Keywords : D-Index, Indexing, External hashing, Metric access methods,
ρ-split function
Kapitola 1
Úvod
V posledních letech obrovsky vzrostly nároky na množství dat, které je třeba
uchovávat. Zároveň roste i rozmanitost ukládaných informací a společně s
ní přestávají stačit prostředky poskytované klasickými relačními databázemi. Typickým příkladem je ukládání a vyhledávání multimediálního obsahu (např. videosekvence, fotky, otisky prstů apod.). Stejný problém se ale
týká v podstatě libovolných dat, která nejsou „nativně“ relační. Zásadní komplikací při práci s tímto typem dat je, že se jedná o nestrukturovaná data.
Vůbec není zřejmé, jakým způsobem formalizovat popis objektu a ani jak volit nějaké signifikantní atributy. To vše je obvykle specializovanou úlohou pro
konkrétní obor zájmu. Největší problém je pak spojen s požadavkem na efektivní vyhledávání. V neposlední řadě je problémem i obtížné specifikování
podobnosti dvou objektů. Navíc dotazování na přesnou shodu již přestává
stačit.
Je evidentní, že uložit fotku v relační databázi jako hodnotu typu BLOB1
umožňuje v podstatě pouze dotazy na přesnou bitovou shodu. To je ale
obecně nepřijatelné, protože přesná bitová shoda dvou různých fotografií
je prakticky vyloučena (stačí např. pozměnit velikost). Což je v rozporu s
očekávaným chováním, které by mělo být schopné nabídnout dotazy vzorovým dokumentem2 a poskytnout podobnostní dotazy (dokázat i ohodnotit
relevanci odpovědi vůči dotazu). Požadovány jsou zejména následující druhy
dotazů:
bodové – Dotaz na existenci dokumentu (resp. shodu vzoru s uloženým
dokumentem).
rozsahové – Dotaz na dokumenty podobné vzoru se zvoleným prahem podobnosti. Uživatel zde nemusí přesně specifikovat atributy hledaného
1
2
Binary Large OBject – nestrukturovaná posloupnost bajtů
Query-by-Example – dotazování příkladem
7
KAPITOLA 1. ÚVOD
8
dokumentu. Navíc je možné výsledek dotazu prezentovat seřazený podle
relevance. Je však dobré si uvědomit, že tento druh dotazů poskytuje
jako odpověď množinu dokumentů, přičemž velikost této množiny se
dopředu nedá příliš dobře odhadnout.
na k nejbližších – Dotaz na k dokumentů s nejvyšší podobností vzhledem
ke vzoru. Zde uživatel ani nemusí specifikovat práh podobnosti. Pouze
požaduje dokumenty v rozsahu k nejrelevantnějších. U tohoto typu
dotazů se dá velikost množiny dokumentů v odpovědi odhadnout dobře,
obvykle se jedná o k 3 .
Relační (resp. objektově-relační) databáze jsou v současné době velmi
rozšířené. Jsou dobře prověřené a stále existuje řada úloh, které spolehlivě
plní. Zejména v komerční sféře je v blízké budoucnosti nereálné očekávat,
že dojde k jejich úplnému opuštění. Navíc i sem přichází podpora pro nové
typy dat (např. text) a s ním i podpora nového způsobu dotazovaní (např.
fulltextové dotazy).
Tato podpora je však obvykle jen částečná, nese s sebou řadu omezení a s
postupem času (resp. rozmanitostí dat) se stává nedostačující. Lze předpokládat, že se nové přístupy správy kolekcí dat, které poskytují plnou podporu
podobnostního dotazování, začnou prosazovat v širší míře. Má tedy smysl
věnovat se výzkumu alternativních přístupů, a tím jim poskytnout šanci na
další rozšíření v budoucnu. Klasickým příkladem, kde původní přístupy již
nyní nedostačují, jsou biometrické databáze.
Směry indexace dat zkoumané v současné době jdou cestou abstrakce
dokumentů, jež reprezentují objekty, na které je následně pohlíženo jako na
body metrického prostoru. Z důvodu předpokladu možnosti dotazovat se na
dokument databáze vzorovým dokumentem, dochází při zpracovávání dotazu
nejprve k abstrakci vzoru a teprve následně k vyhodnocení dotazu. Z praktických důvodů je v dalším textu pojem objekt reprezentující vzorový dokument
často nahrazen prostým označením dotaz. Význam je ale vždy zřejmý. Podobnost dvou prvků je v reprezentaci metrickým prostorem modelována jejich
vzdáleností a měřena vhodnou metrikou. Lze si to představit tak, že čím jsou
si objekty bližší, tím jsou si i podobnější a naopak. Univerzálnost tohoto přístupu spočívá ve volnosti při výběru metriky a abstrakce 4 . Nevýhodou je,
že volba metriky, použitá pro indexaci, determinuje i dotazování5 . A změna
3
Záleží zde, zda vracet více než k v případě, kdy je víc dokumentů stejně podobných
vzoru a alespoň jeden z nich patří mezi k nejbližších resp. je k-tý nejbližší.
4
Lze extrahovat pouze ty „vlastnosti“ dokumentu, které jsou „zajímavé“ pro indexaci
resp. dotazování.
5
Metrika použitá při vyhledávání se nemůže příliš (někdy dokonce vůbec) lišit od té
použité k zaindexování objektů.
KAPITOLA 1. ÚVOD
9
dotazování (např. požadavek na zahrnutí nových atributů dokumentů, nebo
úpravu váhy stávajících atributů dokumentů) si ve většině případů vynucuje
nové zaindexování celé kolekce dokumentů. Důvodem je omezená možnost
použití různých metrik pro dotazování a pro indexaci, současně se zachováním dobrého chování indexu (korektní výsledky bez degradace vlastností6 ).
Inovativní přístup těchto technik umožňuje vznik celé řady indexačních
struktur. Každá z nich má své klady a zápory. Obvyklou situací je existence
řady parametrů, kterými lze chování těchto struktur ovlivnit, což je ovšem
daň za generičnost přístupu. Budoucnost konkrétní indexační struktury do
značné míry závisí i na popsání jejího chování.
1.1
Cíl práce
Cílem této práce je implementovat a prověřit chování externí hašovací metody
D-Index[6, 7] (probrané podrobně v kapitole 3) a srovnat ji s jinými způsoby
indexace. K tomu je potřeba být schopen plnit řadu úloh, mezi které patří
například umožnit zaindexovat datovou sadu, umět přidávat nová data a dokázat řešit dotazování. Navíc je třeba zvládat tyto úlohy efektivně. Každá ze
jmenovaných úloh s sebou však nese specifické problémy, které je třeba řešit.
Dále je nutné zjistit, jak konkrétní nastavení parametrů ovlivňuje chování
D-Indexu.
U metrických indexačních metod se začínají projevovat i další vlastnosti
indexace, které je třeba sledovat. Díky možnosti použití „libovolné“ podobnostní funkce (metriky), nelze obecně garantovat konstantní časovou složitost7 . Je třeba sledovat nejen počet I/O operací8 , ale i počet měření vzdáleností. Pro srovnání je dále zajímavé zaměřit se i na prověření reálných časů
operací9 .
Jako referenční metody byly v této práci použity stromové struktury
M-Strom[5] a PM-Strom[20]. Obě tyto metody jsou detailně popsány v kapitole 2.
Metody zkoumané a popisované v této práci je možné označit za metrické
přístupové metody s přesným vyhledáváním10 .
V úvodní kapitole 1 je rozlišováno, zda se jedná o objekt uložený v databázi, nebo o jeho abstrakci v metrickém prostoru. Toto rozlišování v dalším
6
Degradací vlastností indexu je například jeho proměna na sekvenční prohledávání.
Závisí na vstupních datech, například u řetězcových metrik na délce řetězců.
8
V počátcích vývoje těchto metod byly dokonce I/O operace chápany jako zanedbatelné, vzhledem ke složitosti výpočtu metrik.
9
Samozřejmě závisí i na vnějších faktorech, ale poskytují odlišný pohled na efektivitu.
10
Vrací výsledky „přesně“ odpovídající parametrům dotazu a nedochází k chybným odfiltrováním dokumentů z výsledku.
7
KAPITOLA 1. ÚVOD
10
textu však již nemá smysl a oba významy jsou proto chápány jako zaměnitelné. Zároveň se zde neřeší způsoby extrakce vlastností objektů11 a reprezentace hodnot atributů. Vše je většinou charakteristické pro danou oblast
zdroje dat, a proto to pro obecnou indexaci nemá zásadní význam. Je ovšem
nutné mít na paměti degradaci dimenze hodnot atributů, pokud je zvolena
závislá skupina. Hovoří se zde o tzv. vnitřní dimenzi.
Příklad 1. Dimenze a vnitřní dimenze dat.
• x = hx1 , x2 i , x1 , x2 ∈ R má dimenzi 2 a hodnoty pokrývají celou rovinu
– vnitřní dimenze je 2.
• y = hy1 , 2 · y1 i , y1 ∈ R má dimenzi 2, ale hodnoty leží na přímce –
vnitřní dimenze je 1.
Vztah dimenze a vnitřní dimenze formuluje Chávez a kol.[4] vzorcem
ρ=
µ2
2 · σ2
vyjadřujícím závislost na průměru a rozptylu vzdáleností mezi objekty12 .
1.2
Organizace dokumentu
Úvodní kapitola 1 se věnuje základnímu vhledu do problematiky a popisu
cíle této práce. V závěru této kapitoly je blíže vysvětlena struktura celého
dokumentu.
V kapitole 2 jsou detailněji probrány obecné vlastnosti metrických indexačních metod, spolu s příklady struktur reprezentujících konkrétní přístup
resp. způsob použití řídících objektů (pivotů). Dále se tato kapitola věnuje
metodám M-Strom (v části kapitoly 2.2.2) a PM-Strom (v části kapitoly
2.2.3). V závěru kapitoly je uveden výčet a popis použitých metrik a algoritmů výběru globálních pivotů.
Kapitola 3 se věnuje metrické přístupové metodě D-Index, včetně charakteristiky parametrů a popisu implementovaných algoritmů vkládání a dotazování. V této kapitole je i obecný popis struktury, včetně algoritmů v pseudokódu. Realizace metody se částečně liší od té, která je popsána v [6, 7].
Základní myšlenka je však shodná.
11
Nebo dokonce které vlastnosti zohlednit.
Pro dostatečně velké množství náhodně vybraných prvků vektorového prostoru dimenze n dává vnitřní dimenzi O(n).
12
KAPITOLA 1. ÚVOD
11
Kapitola 4 se věnuje implementaci metod. Struktura M-Strom resp. její
vylepšení PM-Strom je převzata z implementace dostupné v rámci frameworku ATOM[1], kterému je věnována část kapitoly 4.1. Samotný PM-strom13
je detailněji popsán v části kapitoly 4.1.1. Architektura ATOMu příliš nevyhovovala designu D-Indexu, proto byl naprogramován samostatně, jen s
minimální vazbou na ATOM, aby bylo možné porovnávat chování metod a
srovnat výsledky. Popis implementace D-Indexu je uveden v části kapitoly
4.2. Detailní dokumentaci k projektu je možné nalézt na přiloženém médiu14 .
V kapitole 5 jsou popsány provedené testy a výsledky měření. Součástí
této kapitoly je i popis použitých datových sad včetně sad dotazů, se kterými
se provádělo měření.
V závěrečné kapitole 6 je uvedeno zhodnocení odvedené práce a dosažených výsledků.
Nedílnou součástí tohoto dokumentu jsou přílohy, které jsou uvedeny na
závěr samotného dokumentu. Obsah přiloženého média je popsán v části B.
13
14
M-Strom je pouze speciální případ PM-Stromu.
Bližší informace o umístění viz příloha B.
Kapitola 2
Indexace v metrických prostorech
Tato kapitola je věnována popisu indexace v metrických prostorech. Nejprve
jsou uvedeny základní definice a popis základních vlastností. Dále jsou obecně
popsány metrické přístupové metody, spolu s uvedením konkrétních reprezentantů možných řešení. Poté následuje část kapitoly věnovaná konkrétním
příkladům metrik1 . V závěrečné části kapitoly jsou uvedeny algoritmy výběru
pivotů.
2.1
Vlastnosti
Jak bylo řečeno v kapitole 1, budeme se pohybovat v metrických prostorech.
Je třeba nejprve přesněji formalizovat, co je tím myšleno.
Definice 1 (Metrický prostor). Je dán uspořádanou dvojicí (M, d). M je
množina prvků a d je metrika.
Metrika však není zcela libovolná funkce. Musí splňovat jistá základní
pravidla, a jak bude vidět dále, právě ta jsou klíčem k efektivní indexaci.
Definice 2 (Metrika). Je funkce definovaná na prvcích metrického prostoru
d : M × M 7→ R splňující ∀x, y, z ∈ M podmínky:
d(x, y) > 0 ⇔ x 6= y
d(x, x) = 0
d(x, y) = d(y, x)
d(x, z) ≤ d(x, y) + d(y, z)
pozitivita
reflexivita
symetrie
trojúhelníková nerovnost
1
Na některé z nich je dopředně odkazováno již v průběhu kapitoly, větší část z nich je
ale nezávislá na této kapitole, a proto je umístěna až na jejím konci.
12
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
13
V případě databází se obvykle hovoří o tzv. univerzu. Vyjadřuje množinu
všech objektů reprezentovatelných v metrickém prostoru a značí se U. Reálné
databáze ale zdaleka nevyužívají celý prostor2 . V jejich případě se hovoří o
tzv. datových sadách a značí se S ⊆ U, |S| = n.
Nyní již je možné přesně definovat pojem podobnost dvou objektů jako
hodnotu určenou podobnostní funkcí.
Definice 3 (Podobnostní funkce). Je zobrazení U × U 7→ R+
0 přiřazující
každé dvojici objektů univerza Oi , Oj ∈ U nějakou hodnotu z R.
Mírou podobnosti se rozumí zobrazení s : U × U 7→ R přiřazující každé
dvojici objektů univerza U jejich vzájemnou podobnost. Vyšší hodnota
znamená vyšší podobnost.
Mírou odlišnosti se rozumí zobrazení d : U × U 7→ R přiřazující každé
dvojici objektů univerza U jejich vzájemnou odlišnost. Vyšší hodnota
znamená nižší podobnost.
Vztah funkcí d a s:
∀Oi , Oj , Ok ∈ U; d(Oi , Oj ) ≤ d(Oi , Ok ) ⇔ s(Oi , Oj ) ≥ s(Oi , Ok )
Převod funkce s na d: Je možná celá řada převodů, např. pokud lze předpokládat, že ∀Oi ∈ U; s(Oi , Oi ) = C, je možné vyjádřit d z s takto:
∀Oi , Oj ∈ U; d(Oi , Oj ) = C − s(Oi , Oj )
V reálném světě se častěji operuje s (pro člověka přirozenější) mírou podobnosti, naproti tomu v metrických prostorech je „přirozenější“ míra odlišnosti
(vztah je zřejmý z definice metriky). Z praktických důvodů jsou v metrických
přístupových metodách užitečné právě míry odlišnosti a z nich zejména ty,
které splňují požadavky definice metriky. Pojmy míry odlišnosti a metrika
budou dále vyjadřovat v zásadě totéž.
Indexační struktury obecně umožňují rychlý přístup k uloženým objektům3 na základě „nějaké“ znalosti o skupinách objektů. S využitím této znalosti pak není třeba při vyhledávání kontrolovat všechny objekty, ale pouze
určité skupiny.
2
3
Potřebují na reprezentaci svých kolekcí pouze zlomek celého univerza.
Minimalizace počtu I/O operací.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
14
Příklad 2.
• Mějme databázi čísel a vytvořený takový index, že zná uspořádání těchto
čísel. Pro vyhledání hodnoty prostřednictvím indexu lze potom použít
binární vyhledávání.
• Mějme databázi n čísel a vytvořený takový index, že zná jejich rozdělení
do m n skupin (například funkcí x mod m). Při vyhledávání hodnoty
prostřednictvím indexu se nejprve zjistí skupina kam hodnota náleží a
následně se porovná s ostatními hodnotami v nalezené skupině.
Při indexaci v metrických prostorech je jedinou znalostí vzdálenost dvou
objektů a to, že splňuje axiomy metriky.
Důležitými vlastnostmi indexačních struktur jsou:
podporované operace – Jaké podporují typy dotazů a zda umožňují dynamizaci4 .
časová složitost – Doba v počtu operací, v jaké jsou schopny vykonávat
podporované operace.
prostorová složitost – Prostor, který potřebují pro svou efektivní činnost5 .
V metrických přístupových metodách se projevuje i výpočetní komplikovanost metrik, proto je u nich samotných často řešena časová a prostorová složitost. Je dobré si uvědomit, že různé metriky jsou různě náročné
na prostředky a má smysl uvažovat o jejich možném kombinování (ve formě
předzpracování dotazu levnější metrikou). Dále je podstatné to, že díky vlastnostem metrik, zejména trojúhelníkové nerovnosti, je umožněno efektivní vyhledávání6 . Detailnější informace jsou uvedeny v části kapitoly 2.2.
Jsou situace, kdy se rezignuje na přesnost metody vyhledávání, protože
oslabením požadavků lze dosáhnout zvýšení výkonu a zároveň dobrých výsledků. Je garantována odchylka resp. pravděpodobnost správnosti výsledku.
V takovém případě se hovoří o tzv. aproximativním vyhledávání. Tato práce
se jím však nezabývá. Více podrobností je možné nalézt zde [21]. V jiných situacích naopak způsobuje nežádoucí efekty striktní definice metriky, zejména
kvůli snaze o lepší modelování reality.
4
Změny v databázi.
Typicky v operační paměti
6
Snaha o minimalizaci počtu zjišťování vzdálenosti.
5
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
15
Příklad 3. (Problémy metrických axiomů v databázi obrázků)
• Reflexivita a pozitivita určuje d(kůň, socha koně) 6= 0, ale požadované
je d(kůň, socha koně) = 0.
• Symetrie určuje d(váza, váza s květinou) = d(váza s květinou, váza),
ale požadované je d(váza, váza s květinou) 6= d(váza s květinou, váza)
• Ať platí d(pes,Kerberos) = 20, d(Kerberos,saň) = 10 a d(pes,saň) =
100. Tranzitivita d(pes,Kerberos) + d(Kerberos,saň) = 30 ≥ d(pes,saň)
ale požadované je d(pes,saň) = 100.
Obrázek 2.1: Prokletí dimenzionality
Mezi zásadní problémy indexací vysoko rozměrných dat patří tzv. prokletí dimenzionality. Zjednodušeně lze říct, že se zvyšující se dimenzí roste i
vzájemná vzdálenost objektů. Roste dimenze prostoru a exponenciálně roste
jeho objem. Klesá hustota a zanikají shluky (skupiny) dat. Důvodem je skutečnost, že počet bodů datové sady je konstantní, ale mohutnost univerza
roste |S0 | = |S| , |U0 | = n × |U|. Na obrázku 2.1 je ilustrováno v metrice L2
(viz část kapitoly 2.3.1), jak postupně klesá poměr objemu jednotkové koule
vůči jednotkové krychli, a jak bod [0,7], [0,7; 0,7] resp. [0,7; 0,7; 0,7] postupně
„opouští“ jednotkovou kouli.
2.2
Metrické přístupové metody
Jak bylo řečeno v předchozí části, jedná se o metody využívající k indexaci
informaci o vzájemné vzdálenosti objektů. Je možné představit si to následovně. Prostor rozdělí do regionů a objekty následně do skupin podle toho, do
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
16
jakého regionu patří (viz ilustrační obrázek 2.2a). Samotné dotazování probíhá prověřením objektů, které náleží do regionů odpovídajících podmínkám
dotazu, viz ilustrační obrázek 2.2b (oblasti, jejichž objekty je třeba otestovat zda náleží do odpovědi, jsou zvýrazněny obtažením). Neznamená to však
automaticky nutnost zpracovávání celé oblasti. K dalšímu filtrování obyčejně
dochází v průběhu vykonávání dotazu a je závislé na způsobu indexace a
druhu dotazu.
(a) Indexace
(b) Index – dotazování
(c) Vztažná soustava
Obrázek 2.2: Indexace v metrických prostorech
Aby vůbec bylo možné regiony indexu vytvořit, je třeba zvolit skupinu
pivotů (referenčních objektů), vůči kterým se měří vzdálenosti objektů uložených v databázi. Na pivoty je možné nahlížet jako na vztažné body soustavy7 ,
ke kterým je měřena relativní „poloha“ (vektor vzdáleností) objektů, viz ilustrační obrázek 2.2c. Speciálním případem je stav, kdy je udržován úplný
graf vzdáleností mezi objekty (tj. každý objekt je zároveň pivot). Pivoty je
možné rozdělit podle způsobu použití a jejich výběru metodami na:
globální – Všechny pivoty tvoří jednu globální vztažnou soustavu, do které
jsou objekty umísťovány. Zástupcem tohoto přístupu je v tomto textu
zvolena metoda AESA resp. LAESA, více viz část kapitoly 2.2.1.
lokální – Pivoty jsou použity pouze jako lokální vztažná soustava. Objekty
nejsou umísťovány vůči všem zároveň, vždy je potřeba znát relativní
umístění jen pro jistou podmnožinu8 . Jako zástupce tohoto přístupu
7
Mluvit o souřadné soustavě nemá dobrý smysl!
U konkrétních metod může ale i zde dojít k tomu, že jsou při postupném umísťování
objektu spočteny vzdálenosti ke všem pivotům. Nemělo by se to ale stávat často. Např.
pro D-Index může tato situace nastat při umístění objektu v množině vyloučených (více
viz kapitola 3).
8
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
17
je zde popsána metoda M-Strom, více viz část kapitoly 2.2.2. Do této
skupiny patří i D-Index, viz část kapitoly 3.
obojetné – Sem patří metody, které využívají obou přístupů (tj. lokálních i globálních). Reprezentantem těchto metod je v této práci zvolen
PM-Strom, viz část kapitoly 2.2.3.
(a) Bodový dotaz
(b) Rozsahový dotaz
(c) Dotaz na k nejbližších
(zde k=3)
Obrázek 2.3: Dotazování v metrických prostorech
Druhy podobnostních dotazů zmíněné v kapitole 1 jsou pro další účely
formalizovány takto:
Definice 4 (Podobnostní dotazování). Je ilustrováno obrázky 2.3 k jednotlivým druhům dotazů:
bodový – Vyhledání objektu shodného s dotazem9 . V terminologii rozsahového dotazu je zkoumána oblast s poloměrem 0. Odpovědí na dotaz je
Search(Q) = {Oi ∈ S; d(Q, Oi ) = 0}
rozsahový – Vyhledání objektů se zvoleným prahem odlišnosti. Nalezené
objekty jsou právě ty, které splňují d(Q, O) ≤ rQ . Odpovědí na dotaz
je Searchrange (Q, rQ ) = {Oi ∈ S; d(Q, Oi ) ≤ rQ }
kNN – na k nejbližších – Vyhledání k nejpodobnějších objektů dotazu10 .
Je to vlastně úloha analogická rozsahovému dotazu, na rozdíl od něj
však není znám práh odlišnosti, ten je teprve výstupem algoritmu11 .
Odpovědí na dotaz je SearchkN N (Q, k) = Searchrange (Q, rkN N ) pro
takové rkN N , že ∀r ∈ R, r < rkN N → |Searchrange (Q, r)| < k.
9
Pokud je takových víc, lze přikročit k filtrování např. na datovou shodu.
Jak je uvedeno v úvodní kapitole 1, může být za určitých okolností na výstupu více
než k objektů. Zde definovaný způsob toto umožňuje.
11
Lze to chápat i tak, že práh je dynamický.
10
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
18
Z definice podobnostního dotazování plyne, že v zásadě jsou řešeny různé
formy rozsahových dotazů. Klíčovou otázkou v metrických přístupových metodách je vzdálenost dvou objektů resp. náležení objektu do regionu12 . Region
s poloměrem r ∈ R+
0 a centrem Qr ∈ U bude dále značen (Qr , r).
Situace je obecně taková, že známe omezený počet vzdáleností (typicky
pivot – objekt a pivot – dotaz). Problém je rozhodnout, zda objekt O náleží
do oblasti dotazu se středem Q a poloměrem rQ .
(a) Zkoumání naležení do oblasti
(b) Aplikace trojúhelníkové nerovnosti
Obrázek 2.4: Využití trojúhelníkové nerovnosti
Příklad 4 (Využití trojúhelníkové nerovnosti). Použití ilustrují obrázky 2.4.
Geometrická představa je zavádějící, protože se pohybujeme v obecných metrických prostorech.
1. Známe polohu O – objekt databáze a známe polohu Qr – vzor dotazu.
2. Je dán region (Qr , r) – střed v Qr s poloměrem r.
3. Ať navíc polohy O a Qr splňují následující nerovnosti:
d(P1 , O) < d(P1 , Qr ) + r
d(P2 , O) < d(P2 , Qr ) − r
d(P3 , O) > d(P3 , Qr ) + r
(2.1)
(2.2)
(2.3)
Otázkou je, lze rozhodnout o náležení O ∈ (Qr , r) bez znalosti d(Qr , O)?
Odpověď zní ano (v tomto případě).
12
Ve formě hyper-koule v metrickém prostoru. Pojem je chápán jako jisté zobecnění,
kterým je myšlena oblast určená zvoleným centrem c ∈ U a omezená poloměrem r ∈ R+
0
(obsahuje právě ty body x ∈ U, které splňují d(c, x) ≤ r).
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
19
Řešíme zde úlohu rozhodnout, zda platí nerovnost:
d(Qr , O) ≤ r
(2.4)
Pro spor předpokládejme, že ano.
Použití nerovnosti 2.1 Jelikož platí d(P1 , Qr ) + r > d(P1 , O), nelze tuto
nerovnost k rozhodnutí použít. Objekty splňující nerovnost 2.4 také splňují 2.1. Analogická by byla situace, pokud by platilo:
d(P, Qr ) ≥ d(P, O) ∧ d(P, Qr ) ≤ d(P, O) + r
Použití nerovnosti 2.2 Platí, že O ∈
/ (Qr , r).
Důkaz.
d(P2 , Qr ) ≤ d(P2 , O) + d(O, Qr )
d(P2 , O) + r < d(P2 , O) + d(O, Qr )
r < d(Qr , O)
d(Qr , O) ≤ r
trojúhelníková nerovnost
nerovnost 2.2
symetrie
spor s předpokladem 2.4
Použití nerovnosti 2.3 Platí, že O ∈
/ (Qr , r).
Důkaz.
d(P3 , O) ≤ d(P3 , Qr ) + d(Qr , O)
d(P3 , O) > d(P3 , Qr ) + r
r < d(Qr , O)
d(Qr , O) ≤ r
trojúhelníková nerovnost
nerovnost 2.3
spor s předpokladem 2.4
Nepříjemné chování při použití nerovnosti 2.1 (a jí analogické) lze shrnout
následujícím pozorováním, které formalizuje podmínku, kdy nelze odfiltrovat
objekt nenáležející do regionu.
Pozorování 1. K rozhodnutí o platnosti O ∈
/ (Qr , r) pomocí trojúhelníkové
nerovnosti nelze použít pivot, pro který platí:
d(P, Qr ) ≤ d(P, O) + r ∧ d(P, O) ≤ d(P, Qr ) + r
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
20
V příkladu 4 je demonstrována síla metrických axiomů. V reálných dotazech nelze vždy snadno rozhodnout o náležení do regionu. Cílem však je, aby
situace popsaná pozorováním 1 nenastávala „příliš“ často. K tomu, aby bylo
zapříčiněno kompletní zpracování testovaného objektu (tj. načtení do paměti
a výpočtu vzdálenosti d(dotaz, objekt)), musí k této situaci dojít pro všechny
pivoty konkrétní vztažné soustavy.
Zřejmé je, že pokud se podaří odfiltrovat objekt některým z pivotů, nemusí se v testování pokračovat. Pokud by se testovaly v příkladu 4 pivoty v
pořadí jejich očíslování, k použití nerovnosti 2.3 by již nedošlo a nebylo by
potřeba znát ani vzdálenosti d(P3 , Qr ) a d(P3 , O).
Obrázek 2.5: Dolní odhad vzdálenosti objektů
Pozorování 2. Dolní odhad vzdálenosti dvou objektů O1 , O2 ∈ S ve vztažné
soustavě pivotů P ⊆ S lze provést metrikou L∞ (viz část kapitoly 2.3.1) na
vektory jejich vzdáleností k pivotům13 , viz ilustrační obrázek 2.5. Metrika pro
zvolenou množinu (resp. podmnožinu) bude značena LP∞ .
1. Nejprve je třeba si uvědomit, že platí nerovnost:
|d(P, O1 ) − d(P, O2 )| ≤ d(O1 , O2 )
13
(2.5)
Odhad vzdálenosti objektů lze provádět s vektory definovanými libovolnou společnou
podmnožinou pivotů, odhad bude ale obecně horší.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
21
Důkaz.
d(P, O2 ) ≤ d(P, O1 ) + d(O1 , O2 )
trojúhelníková nerovnost
d(P, O2 ) − d(P, O1 ) ≤ d(O1 , O2 )
první část nerovnosti
d(P, O1 ) ≤ d(O1 , O2 ) + d(P, O2 )
trojúhelníková nerovnost a symetrie
d(P, O1 ) − d(P, O2 ) ≤ d(O1 , O2 )
druhá část nerovnosti
|d(P, O1 ) − d(P, O2 )| ≤ d(O1 , O2 )
obě části nerovnosti 2.5
2. Je zřejmé, že nerovnost 2.5 platí pro každý pivot a dvojici objektů (nebyly na ně kladeny žádné podmínky).
3. Je evidentní, že nejlepší z těchto odhadů (tzn. největší dolní odhad) je
max(|d(P, O1 ) − d(P, O2 )|), což je právě výsledek metriky LP∞ .
P ∈P
4. Je dobré si uvědomit, že snaha maximalizovat |d(P, O1 ) − d(P, O2 )| je
spojena s klesáním jedné ze vzdáleností d(P, O1 ) resp. d(P, O2 ). Jinými
slovy, pivot je blízko jednomu z objektů a daleko od druhého. Kvalitativní
rozdíl odhadů je ilustrován na obrázku 2.5 (P1 je horší než P2 ).
V následující části kapitoly jsou uvedeny příklady konkrétních metrických
přístupových metod spolu s jejich vlastnostmi. Metody jsou rozděleny podle
způsobu použití pivotů do tří kategorií (globální, lokální a obojetné).
2.2.1
Metody globálních pivotů – AESA/LAESA
Tato část kapitoly se věnuje metodám globálních pivotů, ve kterých je jediná
množina pivotů využívána celým indexem. Metody popsané v rámci této kapitoly jsou označovány jako metody matice vzdáleností, protože je vytvářena
matice14 vzdáleností pivot – objekt.
AESA – Approximating and Eliminating Search Algorithm
Metoda AESA[24] vychází z předpokladu, že každý objekt je zároveň pivot.
Matice vzdáleností objektů má řádově velikost |S| × |S| = n × n.
Dotazy jsou řešeny postupným dopočítáváním vzdáleností dotazu k pivotům. Spolu s nimi se odfiltrovávají objekty nepatřící do odpovědi. Není však
14
Z vlastnosti symetrie metrik stačí uvažovat horní trojúhelníkové matice.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
22
potřeba spočítat všech n souřadnic, pouze „nějakých“ k < n takových, aby k
sekvenčnímu zpracování zbylo „rozumně“ malé množství objektů.
Algoritmus 1: Rozsahový dotaz – AEASA
Vstup: Dotaz Q, poloměr rQ
Výstup: Odpověď A obsahující právě všechna Oi ∈ (Q, rQ )
/* Inicializace
*/
A = S; // Odpověď (obsahuje celou datovou sadu)
P = ∅; // Již použité pivoty (žádný)
/* Předzpracování odfiltrováním přes pivoty
*/
repeat
p = SelectPivot(S, P); // výběr dosud nepoužitého pivotu
P = P ∪ {p};
foreach O ∈ A do
/* Odfiltrování objektů přes pivot p
*/
if Filter(O, p, Q) then
A = A \ {O};
end
until |A| ≤ SizeBound or |P| ≥ M axP ivotCount ;
/* Sekvenční zpracování zbylých objektů
*/
foreach O ∈ A do
/* Odfiltrování objektů přes vzdálenost k dotazu
*/
if d(O, Q) > rQ then
A = A \ {O};
end
return A; // A nyní obsahuje požadovanou odpověď
Několik poznámek k algoritmu 1:
1. SizeBound – Určuje velikost množiny mezi-odpovědi, která se má zpracovat sekvenčně.
2. M axP ivotCount – Určuje maximální počet pivotů použitých při filtrování (např. |S|).
3. Snadné vylepšení je, pokud ve fázi předzpracování nejsou vybírány pivoty po jednom, ale jako k prvkové množiny. Pro popsání principu a
zlepšení čitelnosti je uvedena zjednodušená varianta.
4. Metoda Filter pracuje v části předzpracování s neúplnými vektory
vzdáleností objektů (nespočítané složky jsou ignorovány) a pomocí me-
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
23
triky LP∞ filtruje objekty, pro které platí LP∞ (Q, O) > rQ . Korektnost
lze nahlédnou v pozorování 2.
Příklad 5 (Filtrování v metodě AESA/LAESA). Předzpracující fáze odstraňuje z odpovědi objekty nesplňující podmínku LP∞ (Q, O) ≤ rQ . Z pohledu
jedné dimenze (tj. jednoho pivotu) jsou objekty splňující tuto podmínku obsaženy na ilustračním obrázku 2.6 v šedě zvýrazněné prstencové oblasti (na
obrázku je pouze výřez). Ostatní objekty jsou odfiltrovány.
Obrázek 2.6: LAESA/AESA – filtrování podle jedné dimenze (resp. pivotu)
LAESA – Linear Approximating and Eliminating Search Algorithm
LAESA[15, 16] je vylepšením metody AESA a omezuje množství pivotů z
|S| = n na konstantní počet m n, což obecně snižuje prostorové nároky a
zachovává efektivitu.
Algoritmus 2: Dvoufázový algoritmus kNN dotazu – LAESA
Vstup: Dotaz Q, počet k
Výstup: Odpověď A obsahující právě všechna Oi ∈ (Q, rkN N )
vQ = Emplace(Q); // Spočítá vektor vzdáleností k pivotům
Sort(S, vQ ); // Uspořádá vzestupně podle vzdálenosti k vQ
T opBound = ∞; // Inicializace meze
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
24
foreach O in S /* Průchod v pořadí daném voláním Sort */ do
if velikost A ≥ k and L∞ (vQ ,vO ) > T opBound then
break; // Dík uspořádání S už neexistuje bližší
/* Test náležení do odpovědi (prvních k automaticky) */
if velikost A < k or d(Q, O) ≤ T opBound then
Insert(A, O); // Zachová uspořádání podle d(Q,x)
/* Odstraní objekty dál než prvek na pozici k
*/
Prune(A, k); // Zachová uspořádání podle d(Q,x)
T opBound = d(Q, poslední v A); // Změna meze
end
end
return A; // A nyní obsahuje požadovanou odpověď
Obecné vlastnosti metod AESA a LAESA
1. Metody byly původně určeny pro dotazy 1-NN, kde experimentálně
dosahují průměrně konstantní časovou složitost (u LAESA závislé na
počtu pivotů). Tyto dotazy zde lze triviálně zobecnit na kNN přidáním
historie udržující místo jednoho k kandidátů.
2. Primární motivací metod bylo minimalizovat počet výpočtů vzdáleností. Není zde řešena práce s maticí vzdáleností.
3. Časová i prostorová složitost konstrukce koreluje s počtem pivotů. Pro
AESA je O(n2 ) pro LAESA je O(m · n).
2.2.2
Metody lokálních pivotů – M-Strom
M-Strom[5] je dynamická vyvážená stromová struktura vycházející z myšlenky B+ -stromů resp. R-Stromů u prostorových databází.
Objekty jsou uchovávány v listech, zatímco vnitřní uzly obsahují směrovací záznamy. Směrování je řešeno prostřednictvím regionů, obsahujících vždy
celý podstrom zakořeněný v konkrétním potomkovi vnitřního uzlu. Podstatnou vlastností těchto regionů je, že se obvykle různě protínají.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
(a) Struktura M-Stromu
(b) Rozsahový dotaz
25
(c) Filtrování dotazů
Obrázek 2.7: M-Strom
Struktura stromu je ilustrována obrázkem 2.7a, význam je následující:
vnitřní uzly – Uložené záznamy obsahují:
• Směrovací záznam (objekt centra a poloměr)15 .
• Vzdálenost centra regionu k nadřazenému řídícímu objektu (centrum otce uzlu)16 .
• Odkaz na syna uzlu.
listové uzly – Uložené záznamy obsahují:
• Reprezentovaný objekt resp. jeho identifikaci v databázi.
• Vzdálenost reprezentovaného objektu k centru nadřazeného regionu.
Při vyhodnocování dotazů jsou k filtrování větví (resp. regionů) využívány
metrické axiomy analogicky k postupům uvedeným výše. V každém testovaném vnitřním uzlu jsou zjištěny směrovací záznamy s regiony, které mají
neprázdný průnik s dotazem. Jejich potomci jsou testováni stejným způsobem v dalším kroku. V listových uzlech je třeba prověřit objekty na náležení
do odpovědi. Průchod stromem je do hloubky (start v kořeni stromu).
15
16
Definice regionu, který pokrývá podstrom zakořeněný v synovi.
Vzdálenost je využita při vyhodnocování dotazů.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
26
Při dynamickém vkládání nových objektů je nejprve nalezen vhodný listový uzel (start v kořeni stromu). Kritériem výběru větve testovaného vnitřního uzlu je náležení do regionu směrovacího záznamu (resp. vzdálenost k
jeho centru) vkládaného objektu. Na konci je objekt vložen do nalezeného
listového uzlu. Pokud dojde k jeho přeplnění, je třeba řešit nastalou situaci
štěpením a propagací výš, dokud se štěpení nezastaví (nejpozději v kořeni).
Vlastnosti M-Stromu a poznámky
1. Jak je vidět na obrázku 2.7a, regiony se opravdu mohou překrývat.
Navíc pokrývání nadřazeným regionem neznamená, že jsou všechny
regiony podstromu celé uvnitř. Obsaženy jsou ale všechna centra (resp.
objekty) těchto regionů.
2. Filtrovat při dotazování lze ty regiony, které se neprotínají s dotazem,
viz obrázek 2.7b.
3. V důsledku překrývání regionů nelze zaručit průchod vždy jedinou větví
ani při vyhodnocování bodového dotazu.
4. Jak je ukázáno na obrázku 2.7c, k filtraci dotazů lze využít vzdálenost
objektu k centru nadřazeného regionu. Odfiltrovat je možné dotazy,
které se neprotínají s prstencem kolem centra nadřazeného regionu.
Oblast prstence je určena obkroužením podřízené oblasti ve vzdálenosti
center regionů.
5. Štěpení uzlu není obecně triviální záležitost. Objekty uzlu jsou rozděleny do dvou nových regionů směrovacích záznamů (podle tzv. partitioning policy). Nejprve je třeba vybrat nová centra (podle tzv. promoting
policy) a následně poloměry oblastí. Směrovací záznamy pro vytvořené
oblasti jsou uloženy do nadřazeném uzlu a nahrazují původní směrovací
záznam. Časová složitost štěpení uzlu závisí na zvoleném algoritmu.
6. Obecně jsou časové složitosti operací dotazování úměrné výšce stromu
O(log(|S|)).
2.2.3
Obojetné – PM-Strom
PM-Strom[20] je de facto rozšířením M-Stromu. Kulové regiony M-Stromu
indexují z velké části „prázdný“ prostor, jehož objem roste se zvyšující se
dimenzí.
Snaha o lepší aproximaci indexovaného prostoru a zároveň zachování dobrého chování M-Stromu vede k použití globálních pivotů, definujících spolu
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
27
s dvojicemi poloměrů prstencové regiony. Průnik prstenců s původními kulovými regiony M-Stromu tvoří regiony PM-Stromu. Obrázek 2.8a ilustruje
„tvar“ regionů M-Stromů a obrázek 2.8b „tvar“ regionů PM-Stromů. Struktura uzlů PM-Stromu je následující:
vnitřní uzly – Uložené záznamy vnitřních uzlů M-Stromu (viz strana 25)
a doplněné o pole dvojic hodnot vzdáleností k vnitřním pivotům (specifikuje prstence).
listové uzly – Uložené záznamy listových uzlů M-Stromu (viz strana 25) a
doplněné o pole hodnot vzdáleností k listovým pivotům.
(a) Region M-Stromu
(b) Region PM-Stromu
Obrázek 2.8: PM-Strom
Vlastnosti PM-Stromu a poznámky
1. Použití pivotů je inspirováno metodami AESA/LAESA.
2. Další parametr struktury je, kolik pivotů (a které referenční objekty)
použít pro vnitřní uzly (jako tzv. vnitřní pivoty) a kolik pro listy (jako
tzv. listové pivoty).
3. Charakteristiky jsou podobné M-Stromu, regiony ale lépe kopírují indexované shluky dat.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
28
4. Více pivotů znamená těsnější nekulové oblasti a to redukuje počet průniků.
5. Nárůst počtu pivotů s sebou nese zvýšení objemu informací v uzlech
stromu (velikosti polí vzdáleností pivotů) a zvýšení počtu měření vzdáleností.
6. Při vkládání nových objektů je třeba aktualizovat pole vzdáleností.
Úprava proběhne na cestě z kořene do listu, kam bylo vloženo.
7. Po štěpení vnitřního uzlu lze spočíst poloměry specifikující prstence
nově vzniklých směrovacích záznamů na základě prstenců podřízených
uzlů (bez nutnosti počítat vzdálenosti).
2.3
Metriky
Tato část kapitoly je věnována příkladům konkrétních metrik a jejich vlastnostem. Jak bylo popsáno výše, metrické přístupové metody jsou obecně nezávislé na volbě metriky. Některé metriky se mohou kombinovat, jiné (jako
např. L∞ ) jsou používány jako pomocné. V níže uvedeném textu jsou nejprve
popsány obecné metriky, ve dvou dalších částech jsou pak uvedeny Lp resp.
řetězcové metriky.
Definice objektu v metrickém prostoru s dimenzí N je v této části chápána jako uspořádaná posloupnost hodnot. Posloupnost bude dále značena x.
Její délka bude určena funkcí len(x). Jednotlivé prvky posloupnosti x budou
adresovány xi pro 1 ≤ i ≤ len(x). Často platí, že ∀x; len(x) = N . Zejména u
řetězcových metrik se na to však spoléhat nedá. Naproti tomu pro (v textu
uvažované) Lp metriky to platí.
Diskrétní metrika – Jedná se zřejmě o nejjednodušší a zcela univerzální
metriku. Je použitelná na libovolnou množinu. Rozhoduje pouze o identitě dvou prvků a má spíše teoretický význam. Časová složitost této
metriky je v nejhorším případě úměrná délce posloupností O(N ) prostorová složitost je konstantní O(1).
1 x=y
dD (x, y) =
0 x 6= y
Hammingova metrika – Tato metrika je často řazena mezi řetězcové metriky17 . V rámci této práce je chápána spíše obecněji, jako počet rozdílů
17
Někdy je pro operandy x a y dokonce požadováno len(x) = len(y).
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
29
v posloupnostech x a y. Časová složitost metriky je úměrná délce posloupností O(N ), prostorová složitost je konstantní18 O(1).
dH (x, y) =
N
X
f (xi , yi ),
f (xi , yi ) =
i=1
1
0
xi = y i
xi 6= yi
Hausdorffova metrika – Tato metrika měří vzdálenost dvou množin. Využívá k tomu „nějakou“ pevně danou funkci měřící vzdálenost dvou prvků
h. Výsledkem je maximum z dvojice maxim z minimálních vzdáleností
(x k y resp. naopak)19 , viz ilustrační obrázek 2.11. Časová složitost metriky je úměrná 2 · N 2 výpočtům h, prostorová složitost je konstantní
O(1) (pokud má h konstantní prostorovou složitost).
H(x, y) = max(h(x, y), h(y, x))
h(x, y) = max min d(xi , yj )
d(xi , yj ) je vzdálenost prvků xi a yj
i
2.3.1
j
Lp metriky a od nich odvozené
Tato část práce je věnována Lp metrikám, které jsou dále chápány jako metriky určené pro měření vzdáleností posloupností (resp. vektorů) stejných
délek číselných hodnot20 .
Časová složitost těchto metrik je úměrná délce posloupností O(N ), prostorová složitost je konstantní O(1).
Minkowského Lp metrika
v
u N
uX
p
|xi − yi |p
dLp (x, y) = Lp (x, y) = t
pro p ≥ 1
i=1
V závislosti na hodnotě p se mění tvar hyper-kulového regionu. S rostoucím p se blíží metrice L∞, která je zde chápána jako speciální případ
Lp metrik.
18
Uchování mezi-výsledků.
Lze chápat jako maximum z dvojice vzdáleností „nejvzdálenější nejbližší“ x k y a
naopak.
20
Dodefinováním výpočtu vzdálenosti v jednotlivých dimenzích pro jiné typy hodnot je
možné jejich zobecnění.
19
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
30
Nejčastěji používané metriky jsou tyto:
1. L1 – Manhattanská metrika – Vzdálenost je rovna sumě vzdáleností v jednotlivých dimenzích. Ilustrační viz obrázek 2.9a.
L1 =
N
X
|xi − yi |
i=1
2. L2 – Eukleidovská metrika – Tato metrika je zobecněním dvourozměrné Eukleidovské vzdálenosti do N dimenzionálního prostoru. Ilustrační viz obrázek 2.9b.
v
u N
uX
L =t
(x − y )2
2
i
i
i=1
3. L∞ – Maximová metrika – Vzdálenost je rovna maximu vzdáleností v jednotlivých dimenzích. Ilustrační viz obrázek 2.9c.
L∞ = max |xi − yi |
i=1..N
Pro p < 1 se opravdu nejedná o metriky, viz příklad 6. Ilustrační obrázek 2.10b ukazuje rozdíl v regionech výše uvedených Lp metrik a
nemetriky L 1 .
2
Příklad 6. Protipříklad ukazující, že L 1 není metrika, díky sporu s
2
trojúhelníkovou nerovností, viz ilustrující obrázky 2.10a a 2.10c.
4 = L 1 (h0, 1i , h1, 0i) > L 1 (h0, 1i , h0, 0i)+L 1 (h0, 0i , h1, 0i) = 1+1 = 2
2
(a) L1 metrika
2
(b) L2 metrika
2
(c) L∞ metrika
Obrázek 2.9: Příklady Lp metrik
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
(a) L 12 – nemetrika!
(b) Průniky oblastí
(c) L 12
klad)
31
(protipří-
Obrázek 2.10: Příklady Lp metrik a nemetrik
Hausdorffova L2 metrika – Viz ilustrační obrázek 2.11. Tato metrika měří
Hausdorffovu vzdálenost polygonů ve dvourozměrném prostoru s použitím L2 metriky na měření vzdálenosti dvou bodů. Výsledkem je maximum z dvojice vzdáleností nejvzdálenějšího nejbližšího bodu polygonu
P1 k polygonu P2 a naopak. Na obrázku 2.11 jsou zobrazeny obě maximalizované hodnoty včetně jejich orientace směru měření mezi oběma
polygony. Časová složitost metriky je O(N 2 ), prostorová složitost je
konstantní O(1).
H(x, y) = max(h(x, y), h(y, x))
h(x, y) = max min L2 (xi , yj )
xi = [x1i , x2i ] , yj = yj1 , yj2
i
j
Obrázek 2.11: Hausdorffova metrika dvou polygonů pro d ≡ L2
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
2.3.2
32
Řetězcové metriky
V této části kapitoly jsou uvedeny metriky měřící vzdálenosti mezi řetězci21 ,
vyjádřenou minimálním počtem editačních operací (substituce, smazání nebo
vložení znaku), transformujících jednu posloupnost na druhou a naopak.
Vzhledem k teoreticky velkým délkám řetězců, které se mohou navíc lišit,
bude dále striktně rozlišována len(x) a len(y).
Metriky uvedené v rámci této kapitoly byly v této práci implementované metodami dynamického programování. Mají časovou složitost úměrnou
součinu délek posloupností O(len(x) · len(y)), prostorovou složitost úměrnou délce kratší z posloupností22 O(min(len(x), len(y))) resp. součtu délek23
O(len(x) + len(y)).
Výpočet podproblémů je postupně rozšiřován na řešení celého problému
(tj. vzdálenost celých řetězců). Pro další účely je třeba zadefinovat si matice
Dmin a Dmax .
Definice 5. (Matice Dmin a Dmax editačních vzdáleností)

0
i = j = 0, inicializace



Dmin (i − 1, j − 1) + d(xi , yj )
i, j > 0, nahraz./kopie
Dmin (i, j) = min
D
(i
−
1,
j)
+
c
i > 0, j = 0, vkládání

min


Dmin (i, j − 1) + c
i = 0, j > 0, mazání

0
inicializace, dolní mez



Dmax (i − 1, j − 1) − d(xi , yj )
i, j > 0, nahraz./kopie
Dmax (i, j) = max
Dmax (i − 1, j) − c
i > 0, j = 0, vkládání



Dmax (i, j − 1) − c
i = 0, j > 0, mazání
Jak vypadá krok výpočtu algoritmů a vztah k těmto maticím je ilustrováno obrázkem 2.12a. Vztah matic k editačním operacím je shrnut v tabulce
2.1.
SUBSTITUCE
INSERT
DELETE
nahrazení
kopírování
±d(xi , yj ), xi 6= yj ±d(xi , yj ), xi = yj
vkládání
±c
mazání
±c
Tabulka 2.1: Editační operace a vztah k Dmin a Dmax
21
Jako vyčerpávající zdroj řetězcových metrik může sloužit [3].
Při uchování mezivýsledku.
23
Pokud nelze předpokládat opakované čtení x a y.
22
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
(a) Krok výpočtu
(b) Cesta 1. („levnější“ nahrazení)
33
(c) Cesta 2.
Obrázek 2.12: Editační vzdálenost
Posloupnost editačních operací si lze představit jako cestu maticí Dmin
resp. Dmax . Cesta je monotonní (nedochází k vracení) a v závislosti na váze
(resp. ceně) operací se mění její „tvar“. Vztah váhy nahrazení a váhy operací
vložení resp. smazání ilustrují obrázky 2.12b a 2.12c.
Obrázek 2.13: Výpočet editační vzdálenosti
V průběhu výpočtu se řeší jako jednotlivé podproblémy možné cesty začínající v levém horním rohu. Po krocích jsou postupně prodlužovány až do
výsledné cesty maticí. Výpočet probíhá zleva doprava po řádcích. Díky monotonii není pro výpočet řádku potřeba znát nikdy starší, než předchozí řádek,
viz obrázek 2.13. Kroky výpočtu a inicializace jsou ilustrovány obrázkem
2.12a. Cena operace závisí na jejím druhu a dvojici znaků, na které je aplikována. Výsledná hodnota právě počítané buňky je dána hodnotou buňky,
ze které se do ní přechází a cenou operace pomocí které se přechází, viz obrázek 2.12a. Pravidla a ceny pro volbu přechodu jsou určeny konkrétními
parametry matic Dmin resp. Dmax .
Jako výsledná cesta je vybrána ta, která vede z levého horního rohu do
pravého dolního rohu. Vzdálenost řetězců je rovna maximální hodnotě na této
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
34
cestě. Z monotonie hodnot mezivýsledků u matice Dmin splývá maximální
hodnota s hodnotou v pravém dolním rohu matice.
1. Hammingova metrika – Na tuto metriku lze pohlížet jako na speciální případ Levenshteinovy metriky. Pokud vyžadujeme, aby len(x) =
len(y). Jinak jsou ekvivalentní.
dH (x, y) = Dmin (len(x), len(y)),
c = 1 nutné
když len(x) 6= len(y)
1
xi = y i
d(xi , yi ) =
0
xi 6= yi
2. Levenshteinova metrika24 – Tato metrika je asi nejčastější zástupcem řetězcových metrik. Váhy editačních operací, kromě shody, mají
cenu 1. Shoda znaků je oceněna 0.
c=1
dL (x, y) = Dmin (len(x), len(y)),
d(xi , yi ) =
1
0
xi = y i
xi 6= yi
3. Needlemanova–Wunchova vzdálenost[17] – Zobecňuje přístup Levenshtenovy metriky. Cena mezery (vložení resp. mazání znaku) zde
není 1, ale je určena parametrem metody. Obecně se ale nejedná o
metriku pro všechny hodnoty gapcost .
dN W (x, y, gapcost ) = Dmin (len(x), len(y)),
c = gapcost d(xi , yi ) =
1
0
xi = y i
xi 6= yi
4. Smithova–Watermanova vzdálenost[23] – Další zobecnění povolující oproti Needlemanově-Wunchově vzdálenosti změny cenové funkce
operace substituce. Může být např. záporná (bonus za shodu) a větší
než 1 (penalty za různé páry neshod znaků). Je zde použita matice
Dmax a celkové maximum v matici je výslednou vzdáleností25 . Obecně
se opět nejedná o metriku.
dSW (x, y, gapcost , Fcost ) = max Dmax (xi , yj ),
i,j
24
c = gapcost
d(xi , yi ) = Fcost (xi , yi )
Někdy se o ní hovoří přímo jako o editační vzdálenosti.
Kvůli porušení monotonie cen je potřeba si během výpočtu uchovávat spočtené maximum z matice.
25
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
2.4
35
Výběr pivotů
Klíčovým faktorem pro metrické přístupové metody využívající pivoty je
„kvalitní“ výběr referenčních objektů[25]. Fyzikální terminologií je problém
formulovatelný tak, že „pozorovatelé“ (referenční objekty) vztažné soustavy
by měly poskytovat „dostatečně“ rozdílné pohledy. Vhodný výběr do značné
míry ovlivňuje efektivitu metod. Základní požadavky na volbu lze shrnout
takto:
• Pivoty jsou daleko od sebe. – Různé výhledy na data.
• Pivoty „dobře“ rozdělují vzdálenosti k objektům. – Žádný pivot nemá
ke všem objektům „podobně“ daleko26 .
• Pivoty „dobře“ rozdělují vektory vzdáleností objektů. – Kritérium vzdáleností těchto vektorů (viz dále kritérium efektivity).
• Pivoty jsou vybrány v „rozumném“ čase. – Kritérium časové složitosti
algoritmu.
• Jako další kriterium je v této práci nově uveden požadavek na snížení
složitosti výpočtu vektorů vzdáleností. – Kritérium časové složitosti
výpočtu vzdálenosti k pivotu.
Další možností jak volit množinu pivotů je použít tzv. kritérium efektivity
porovnávající průměrnou vzdálenost v metrice L∞ , vektorů poloh všech objektů ve vztažných soustavách pivotů[25]. Je jasné, že tento způsob hledání
pivotů je časově náročný a to i v případě, když je použit pouze k porovnání „kvalit“ několika málo množin pivotů. Zlepšení lze dosáhnout, pokud se
neuvažuje výpočet přes celou S, ale pouze přes dvojice objektů podmnožiny.
1. Množina pivotů P ⊆ S, |P | = k
2. Náhodně se zvolí l párů objektů {(O1 , O10 ) . . . (Ol , Ol0 )} , Oi , Oi0 ∈ S.
3. Ohodnocení množiny P se spočítá následovně
l
µPS
1X P
L∞ (Oi , O0i )
=
l i=1
Časová složitost výpočtu µPS úměrná l výpočtům LP∞ .
Kvalita dvou množin pivotů P1 , P2 ⊆ S se zjistí porovnáním hodnot
P1
µS , µPS 2 (větší je lepší).
26
Všechny vzdálenosti od pivotu k objektům padnou do úzkého intervalu hodnot. Jeho
nepoužitím se ztratí pouze malá rozlišovací schopnost, ale ušetří se výpočet jedné položky
vektorů vzdáleností.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
2.4.1
36
Náhodný výběr
Je to zřejmě nejjednodušší algoritmus. Pivoty jsou voleny náhodně z S. Zcela
ignorovány jsou vzájemné polohy objektů i ostatní zmíněná kritéria. Časová
složitost je konstantní, resp. úměrná počtu volených pivotů, O(k) = O(1)
pro k |S|. Nejsou počítány žádné vzdálenosti.
Zajímavé (a překvapivé) je, že tento algoritmus je často používaný a poskytuje „rozumné“ výsledky.
2.4.2
Náhodný výběr množin
Jedná se o vylepšení předchozí metody. Náhodně je vybráno N množin s
k prvky. Každá z těchto množin reprezentuje kandidátní skupinu pivotů.
Jednotlivé množiny jsou ohodnoceny podle vzájemné vzdálenosti obsažených prvků. Pro každou z nich je spočítána kumulativní vzdálenost prvků
k−1
k
P P
d(pi , pj ). Vybere se právě ta s maximálním ohodnocením (největší
i=1 j=i+1
hodnotou součtu). Časová složitost je úměrná součinu počtu množin N a
).
množství výpočtů metriky pro každou z nich (tj. k·(k−1)
2
2.4.3
Inkrementální algoritmus
Využívá kritérium efektivity a postupně rozšiřuje množinu pivotů P až do
požadované mohutnosti k. Jednotlivé pivoty jsou vybírány z m prvkových
vzorků S (každý pivot z jiného). Na počátku je z prvního vzorku vybrán p1
{p }
maximalizující µS 1 . V dalším kroku je z nového vzorku vybrán p2 maxima{p ,p }
lizující (se zafixovaným p1 ) µS 1 2 . Analogicky pokračuje algoritmus až do
kroku k, kdy je vybrán pk a tedy i celá P. Časová složitost je v každé iteraci
i obecně úměrná součinu velikosti vzorku a složitosti výpočtu µPS i pro aktuální Pi = {p1 , p2 , . . . pi }. Pokud však jsou mezi iteracemi zachovány veškeré
P
hodnoty potřebné pro výpočet µPS i z µS i−1 , lze složitost redukovat. A celkově
pro k iterací dojde k postupnému dopočítávání jediné hodnoty µPS , které ale
probíhá v k · m krocích (k iterací, m pokusů o rozšíření).
2.4.4
H-F algoritmus
V Hull-Foci algoritmu[8] jsou hledané pivoty označovány jako ohniska (tj.
foci). Je snaha nalézt taková ohniska, která jsou blízko „obalu“ (tj. hull) datové sady. Algoritmus nejprve náhodně vybere jeden objekt, pak nalezne jemu
nejvzdálenější a prohlásí jej za první ohnisko f1 . V dalším kroku je zvoleno
druhé ohnisko f2 jako nejvzdálenější objekt k f1 . Vzdálenost mezi nimi f1 a
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
37
f2 je označena jako hrana h a slouží k definici kritéria volby dalších ohnisek ze zbylých objektů. V každé další iteraci
P je další ohnisko vybíráno jako
objekt s minimální hodnotou errorj =
|h − d(p, Oj )|, určujícím chybu
p∈Pi
pro objekt j. Časová složitost je úměrná součinu počtu hledaných ohnisek
(pivotů) a počtu objektů (|S|). Hledání f2 a výpočty errorj ale odpovídají
postupnému dopočítávání souřadnic vektorů vzdáleností objektů. Pokud se
jedná o indexační strukturu, kde jsou tyto vektory počítány a udržovány, je
časová složitost úměrná pouze počtu objektů (|S|).
2.4.5
Výběr vzdálených pivotů
Spatial Selection of Sparse Pivots algoritmus[18] přináší oproti výše uvedeným metodám tu výhodu, že není třeba volit kolik pivotů vybrat. Redukuje
tedy počet parametrů metrických metod založených na pivotech o tuto volbu.
Výběr je proveden dynamicky na základě znalosti o datové sadě (resp. maximální vzdálenosti mezi objekty M = max d(Oi , Oj )) a parametru metody
Oi ,Oj ∈S
α. Prakticky je sice nahrazen jeden parametr jiným, ale jak je ukázáno v [18],
α je vhodné volit z intervalu h0, 35; 0, 4i, přičemž výsledky se příliš neliší pro
konkrétní hodnoty z tohoto intervalu.
Algoritmus probíhá inkrementálně. Nejprve je zvolen O1 ∈ S jako pivot p1 .
V dalším kroku je vybrán první objekt Ok ∈ S takový, že splňuje d(Ok , p1 ) ≥
M · α. V kroku i je vybrán Oj ∈ S takový, že splňuje ∀p ∈ Pi ; d(Oj , p) ≥
M · α27 .
Časová složitost závisí na volbě parametrů a datové sadě. Blíže je diskutována v [18].
Výhodou algoritmu je flexibilita výběru množiny pivotů. Metoda má
ovšem i své nevýhody. Pokud se buduje indexační struktura dynamicky, ne
vždy je vhodné brát opravdu M jako maximum celé datové sady. Objekty
mohou být dostupné pouze v jistých dávkách, maximum pro ně ale nemusí
být známé.
2.4.6
Výběr levných pivotů
Veškeré doposud uvažované metody nebraly ohled na složitost výpočtů spojených s konkrétním pivotem. Rozdílná složitost se dá nahlédnout např. u
řetězcových metrik, viz část kapitoly 2.3.2, kde je složitost závislá na délce
řetězců. U těchto metrik lze s výhodou využít toho, že pokud je rozdíl délek l,
27
Hodnotu M · α lze chápat jako „práh“ vzdáleností.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
38
znamená to alespoň l operací vložení resp. mazání. Pak je možné „zadarmo“
učinit dolní odhad vzdálenosti a redukovat počet výpočtů metriky.
Příklad 7. (Řetězcová data) Pokud se hledají pivoty řetězcových objektů, a
je uvažován model ceny určený jejich délkami, tak má cena zřejmý vztah ke
vzdálenosti. Jak vyplývá z části kapitoly 2.4, zabývající se problematikou volby
pivotů, je vhodné volit pivoty s různými cenami a vzdálenostmi (rozprostřít je
do širšího spektra), aby byla zajištěna nejen dostatečná vzdálenost k datům,
ale i mezi pivoty vzájemně. Aby byly poskytovány dostatečně odlišné „pohledy“
z pivotů, je podstatné i samotné využití metriky.
Nově je v této práci uveden algoritmus inspirující se výhodami algoritmu
výběru vzdálených pivotů, uvedený v části kapitoly 2.4.5, tj. dynamický výběr
s kritériem vzdálenosti.
Zde se využívá kritérium ceny pivotu. Primárně byl tento algoritmus navržen s předpokladem, že cena koreluje se vzdáleností. Další redukce počtu
měření vzdáleností je dosaženo omezením se pouze na pivot vybraný v předchozí iteraci.
Časová složitost je úměrná složitosti seřazení S podle ceny a součtu složitostí všech provedených testů kritérií ceny a vzdálenosti28 , za celý běh algoritmu. Při návrhu se předpokládalo, že složitost výpočtu ceny lze zanedbat.
Díky tomu je možné „dovolit“ si seřadit S podle ceny. Navíc není explicitně
vyžadována žádná „globální“ znalost o S (např. maximální vzdálenost dvou
prvků).
Algoritmus 3: Výběr levných pivotů – LowCostPivots
Vstup:
1. Datová sada S
2. Cenová funkce Cost(O ∈ S)
3. Interval ceny hCostL; CostU i
4. Požadovaný růst ceny CostGap
5. Minimální vzdálenost dalšího pivota DistanceGap
6. Počet pivotů (horní mez) P ivotCount
Výstup: Navzorkované pivoty P
28
Vzdálenost se navíc počítá pouze při splnění kritéria ceny.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
39
/* Inicializace
*/
CostBound = CostL; DistanceBound = 0;
/* Uspořádá vzestupně podle ceny a vynechá ty s cenou mimo
interval hCostL; CostU i
*/
R = Sort(S, Cost, hCostL; CostU i);
p = první objekt R;
R = R \ {p}; P = {p};
/* Sekvenční zpracování objektů
*/
foreach r in R do
/* Kritérium ceny
*/
if Cost(r) < CostBound then
continue; // Nesplněno kritérium ceny
/* Kritérium vzdálenosti
*/
if d(p, r) < DistanceBound then
continue; // Nesplněno kritérium vzdálenosti
/* Objekt vyhovuje podmínkám výběru pivota
*/
p = r; // Pivot vůči kterému měřit vzdálenost
P = P ∪ {p};
/* Změna mezí
*/
CostBound = CostBound + CostGap;
DistanceBound = DistanceBound + DistanceGap;
if |P| = P ivotCount then
break; // Požadovaný počet pivotů vybrán
end
return P; // P nyní obsahuje navzorkované pivoty
Několik poznámek k algoritmu 3:
1. Výpočet ceny je prováděn funkcí, kterou dostane algoritmus na vstupu.
2. Algoritmus hledá vždy první objekt, který má cenu a vzdálenost větší,
než dané meze.
3. Meze ceny a vzdálenosti se mění po splnění obou kritérií o hodnoty dané
algoritmem na vstupu. Změna mezí, založená pouze na hodnotách naměřených v dané iteraci, by po výběru „extrémního“ objektu mohla
diskvalifikovat „příliš“ kandidátů. Je ale podstatné, že kandidátní objekty jsou uspořádány podle ceny.
KAPITOLA 2. INDEXACE V METRICKÝCH PROSTORECH
40
4. Zvyšováním meze vzdálenosti po každé iteraci je z trojúhelníkové nerovnosti zajištěna minimální vzdálenost mezi pivoty.
5. Algoritmus sice uvádí řadu nových parametrů, ale to je jen díky jeho
obecnému návrhu.
Kapitola 3
D-Index
Tato kapitola je věnována metrické přístupové metodě D-Index[6, 7]. Možných přístupů k řešení indexace existuje celá řada[6, 21, 22, 25]. Principy,
které využívají, jsou popsány v předchozí kapitole. Metoda D-Index kombinuje pro zajištění efektivní indexace více technik. Konkrétně se jedná o
přístup, kdy se rekurzivně rozdělují shluky dat na části, které jsou následně
ukládány. Myšlenka je tedy taková, aby objekty ze stejných shluků (tj. které
jsou si „podobné“) byly na externím úložišti uloženy „blízko“ sebe. Pokud
jsou ve stejném bloku a patří do odpovědi, je zřejmé, že se ušetří počet I/O.
Využitím metrických vlastností lze navíc redukovat počty použití metriky.
V této práci se zvolená implementace metody D-Index v některých částech odchyluje od [6, 7], ale princip je totožný. Jedná se zejména o uvolnění
některých parametrů a změny v algoritmech.
3.1
Principy
Stejně jako u metod zmiňovaných v předcházející kapitole, je pro korektnost nutné zavést potřebné formalizmy a z nich plynoucí vlastnosti. Metoda
D-Index je založena na hašování objektů do oblastí vztažné soustavy podle
shluků, do kterých náleží. Objekty, které se nepodaří umístit, jsou dále rekurzivně děleny vůči nové vztažné soustavě.
Nejprve je však nutné vytvořit aparát definující oblasti hašování (tj. separovatelné množiny) a oblast určenou k rekurzivnímu dělení (tj. množinu
vyloučených).
Definice 6. (ρ–rozdělující funkce prvního řadu) Je dán metrický prostor
(M, d) a libovolné ρ ∈ R splňující podmínku 0 ≤ ρ < d+ = max d(x, y).
x,y∈M
Potom ρ–rozdělující funkcí prvního řádu je zobrazení s1,ρ : M 7→ {0, 1, −}
41
KAPITOLA 3. D-INDEX
42
takové, že ∀x, y ∈ M ; x 6= y splňuje:
s1,ρ (x) = 0 ∧ s1,ρ (y) = 1 ⇒ d(x, y) > 2 · ρ
s1,ρ1 (x) 6= − ∧ s1,ρ2 (y) = − ∧ ρ1 ≥ ρ2 ⇒ d(x, y) > ρ1 − ρ2
separace
symetrie
Ilustrující obrázek separace viz 3.1a a obrázek symetrie viz 3.1b.
(a) separace
(b) symetrie
Obrázek 3.1: ρ–rozdělující funkce
Pojem z definice 6 lze snadno rozšířit pro více dimenzí. Vlastnosti separace
a symetrie mají smysl i zde a jak bude vidět dále, jedná se o podstatné
vlastnosti pro „rozumnou“ parcelaci prostoru.
Definice 7. (ρ–rozdělující funkce řádu n) Je dán metrický prostor (M, d) a n
1,ρ
ρ–rozdělujících funkcí prvního řádu s1,ρ
1 , . . . , sn . Potom ρ–rozdělující funkce
n
řádu n je zobrazení sn,ρ : M 7→ {0, 1, −} takové, že ∀x, y ∈ M ; x 6= y
splňuje:
1,ρ
sn,ρ (x) = (s1,ρ
1 (x), . . . , sn (x))
1,ρ
n,ρ
∀i; s1,ρ
(x) 6= sn,ρ (y) ⇒ d(x, y) > 2 · ρ
i (x) 6= − ∧ si (y) 6= − ∧ s
∀i;
si1,ρ1 (x)
6= − ∧ ∃j;
2
s1,ρ
(y)
j
= − ∧ ρ1 ≥ ρ2 ⇒ d(x, y) > ρ1 − ρ2
separace
symetrie
Zatím jsou definovány obecné charakteristiky rozdělujících funkcí. Rozdělující funkce sice nijak neomezují „tvar“ vydělených oblastí, ale zároveň
neposkytují způsob jak tyto oblasti vytvořit1 . Pro další použití je nezbytné
zvolit konkrétní třídu ρ–rozdělujících funkcí.
1
Ani nevyžadují existenci nějaké vztažné soustavy
KAPITOLA 3. D-INDEX
43
Jako vhodná volba je třída funkcí rozdělujících prostor na oblasti určené
průniky kulových regionů. Jako výhodu je možné využívat skutečnost, že
kulové oblasti jsou již součástí vlastního dotazování. Je navíc možné uplatnit
myšlenky a postupy uvedené v kapitole 2.
Definice 8. (kulová ρ–rozdělující funkce prvního řádu) Je dán metrický prostor (M, d), libovolné p ∈ M a r, ρ ∈ R splňující podmínku 0 ≤ ρ < d+ =
max d(x, y) ∧ rp ≥ ρ. Potom kulová ρ–rozdělující funkce prvního řádu je
x,y∈M
zobrazení bps1,ρ : M 7→ {0, 1, −} takové, že pro x ∈ M :

d(p, x) ≤ r − ρ
 0
1,p,r,ρ
1
d(p, x) > r + ρ
bps
(x) =

−
jinak
bps1,ρ (x) = bps1,p,r,ρ (x)
zkrácený zápis
Důkaz. (bps1,ρ je ρ–rozdělující funkce prvního řadu) Je třeba ověřit splnění
vlastností separace a symetrie, ilustrující obrázky viz 3.1.
1. Separace x, y ∈ M
bps1,ρ (x) = 0 ∧ bps1,ρ (y) = 1
d(p, x) ≤ r − ρ ∧ d(p, y) > r + ρ
d(p, y) ≤ d(p, x) + d(x, y)
r + ρ < r − ρ + d(x, y)
2 · ρ < d(x, y)
předpoklad
z definice
trojúhelníková nerovnost
separace platí
2. Symetrie x, y ∈ M ; x 6= y
bps1,ρ1 (x) 6= − ∧ bps1,ρ2 (y) = − ∧ ρ1 ≥ ρ2
d(p, y) ∈ (r − ρ2 ; r + ρ2 i
d(p, x) ≤ r − ρ1
d(p, y) ≤ d(p, x) + d(x, y)
r − ρ2 < r − ρ1 + d(x, y)
d(p, x) > r + ρ1
d(p, x) ≤ d(p, y) + d(x, y)
r + ρ1 < r + ρ2 + d(x, y)
ρ1 − ρ2 < d(x, y)
předpoklad
z definice
1,ρ1
případ bps (x) = 0
trojúhelníková nerovnost
případ splňuje symetrii
případ bps1,ρ1 (x) = 1
metrické axiomy
případ splňuje symetrii
symetrie platí
KAPITOLA 3. D-INDEX
44
Zápis bps1,p,r,ρ označuje funkci, součástí jejíž definice je prvek metrického
prostoru p a poloměr oblasti r (region s centrem v p). Zkráceně se bude dále
zapisovat jako bps1,ρ .
Opět lze přímočaře rozšířit do n dimenzí, což dává aparát k rozdělení více
dimenzionálního metrického prostoru.
Definice 9. (kulová ρ–rozdělující funkce řádu n) Je dán metrický prostor
1,ρ
(M, d) a n kulových ρ–rozdělujících funkcí prvního řádu bps1,ρ
1 , . . . , bpsn . Potom kulová ρ–rozdělující funkce řádu n je zobrazení bpsn,ρ : M 7→ {0, 1, −}n
takové, že pro x ∈ M :
1 ,r1 ,ρ1
(x), . . . , bpsn1,pn ,rn ,ρn (x)
bpsn,p1 ,r1 ,ρ1 ,...,pn ,rn ,ρn (x) = bps1,p
1
1,ρ
zkráceně
bpsn,ρ (x) = bps1,ρ
1 (x), . . . , bpsn (x)
Důkaz. Z definice a platnosti pro všechny bps1,ρ
i .
Označení bpsn,ρ je opět zkrácený zápis. Každá z generujících bps1,ρ
má
i
vlastní parametry pi , ri , ρi . Dále je to zároveň chápáno tak, že prvky metrického prostoru pi tvoří vztažnou soustavu (tj. jsou to pivoty).
Vzniklé regiony je možné snadno číslovat, což zjednodušuje práci s nimi.
Oblasti splňující − ∈ bpsn,ρ není třeba rozlišovat a může se na ně pohlížet
jako na jeden sjednocený region. Bližší vysvětlení je uvedeno v následujícím
textu.
Definice 10. (Číslování posloupností reg = sn,ρ )
funkce sn,ρ řádu n. Potom posloupnosti reg = sn,ρ
{0, 1, −}n 7→ {0, . . . , 2n } následujícím způsobem:
 len(reg)
 P
regi · 2len(reg)−i
∀i;
b(reg) =
i=1
 len(reg)
2
∃i;
Je dána ρ–rozdělující
lze číslovat funkcí b :
regi 6= −
regi = −
Takto definované číslování má několik vlastností, které se dají s výhodou
využít.
Pozorování 3. (Vlastnosti číslování b)
1. Hodnoty číslování 0, . . . , 2n−1 jsou vyhrazeny pro posloupnosti obsahující pouze {0, 1}. A funkce je pro ně prostá.
2. b(reg) = 2n ⇔ − ∈ reg.
Pomocí ρ–rozdělující funkce sn,ρ je možné rozdělit prvky metrického prostoru (M, d) do tříd ekvivalence [x]s = {y ∈ M ; sn,ρ (y) = sn,ρ (x)} a ty použít
KAPITOLA 3. D-INDEX
45
na rozdělení prostoru do separovatelných množin a do množiny vyloučených.
Vzniklé množiny jdou následně použít jako indexované shluky, resp. jako
vstup pro rekurzivní dělení.
Definice 11. (Separovatelná množina a množina vyloučených) Viz ilustrující
obrázek 3.2.
• Separovatelná množina – Je Sin,ρ = [x]s pro x ∈ M kde i = b(sn,ρ (x)) 6=
2n .
S
• Množina vyloučených – Je X n,ρ = [x]s pro x ∈ M kde b(sn,ρ (x)) = 2n
Následující pozorování shrnuje užitečné vlastnosti definovaných množin.
Pozorování 4. (Vlastnosti separovatelných množin a množiny vyloučených)
1. Sin,ρ ∩ Sjn,ρ = ∅ pro i 6= j.
2. Sin,ρ ∩ X n,ρ = ∅ pro ∀i.
S
3. Sin,ρ ∪ X n,ρ = M .
i
4. Maximální počet Sin,ρ je 2n ale jak je vidět na obrázku 3.2, nemusí být
vždy vytvořeny všechny2 .
Obrázek 3.2: Separovatelná množina a množina vyloučených
Pro efektivní dotazování je potřebné si dále formalizovat vlastnosti vytvořených regionů a práci s nimi. Zejména s ohledem na vyhodnocování rozsahových a kNN dotazů je nutné umět efektivně vyhodnocovat regiony, které mají
Podrobné vypsání vytvořených Sin,ρ na obrázku lze nalézt v tabulce 3.1, v rámci
příkladu 8.
2
KAPITOLA 3. D-INDEX
46
neprázdný průnik s dotazem a u kNN dotazů se navíc pokusit minimalizovat
počet testovaných oblastí při hledání rkN N .
Řešení průniku dotazu s prostorem dá na výstup obecně celou množinu
oblastí vzniklých dělením prostoru. Je vhodné si zadefinovat některé množiny regionů a jejich vlastnosti. Z důvodu přímého vztahu ke kulovým ρ–
rozdělujícím funkcím je zachováno názvosloví.
Zcela přímočaře je určena množina regionů vzniklá průnikem prostoru s
dotazem.
Definice 12. (vnitřní kulový ρ–rozdělující region řádu n) Je dán metrický
prostor (M, d), libovolné c ∈ M , r ∈ R a kulová ρ–rozdělující funkce bpsn,ρ .
Potom vnitřní kulový ρ–rozdělující region řadu n je množina REGn,ρ ⊆
P ({0, 1, −}n ) taková, že
REGn,ρ (c, r) = {bpsn,ρ (x); ∀x ∈ M ; d(c, x) < r}
zkrácený zápis
Pro rozumné generování prvků této množiny (resp. alespoň její aproximace) je podstatné učinit následující pozorování.
Pozorování 5. (Vlastnosti REGn,ρ )
n,ρ
1. Jaké hodnoty nabývá libovolná z bps1,ρ
(c, r) lze určit
i definujících REG
1,ρ
ze znalosti bpsi , c a r.
(a) r < d(p, c) < r + ρ
(b) d(p, c) = r
(c) r−ρ < d(p, c) < r
Obrázek 3.3: REGn,ρ : bps1,ρ
i (c) = −
(a) d(p, c) ≤ r − ρ
(b) d(p, c) > r + ρ
1,ρ
Obrázek 3.4: REGn,ρ : bps1,ρ
i (c) = 0 a bpsi (c) = 1
KAPITOLA 3. D-INDEX
47
1,p,r ,ρ
Důkaz. Existují tři základní případy podle hodnoty bpsi p (c).

H1 = H2 = d(p, c) + r
viz obrázek 3.4a
 0
1,ρ
1
H1 = H2 = max(0, d(p, c) − r) viz obrázek 3.4b
bpsi (c) =

−
Ty se pro bps1,ρ
i (c) = − ještě dále dělí podle polohy c vůči p.

H1 = d(p, c) − r, H2 = d(p, c) + r viz obr. 3.3a
 >r
=r
H1 = H2 = d(p, c) ± r
viz obr. 3.3b
d(p, c) =

<r
H1 = d(p, c) + r, H1 = d(p, c) − r viz obr. 3.3c
Hodnoty H1 a H2 stačí porovnat s d(p, c) − rp a d(p, c) + rp a výsledná
závislost hodnot bps1,ρ
již plyne z definice.
i
Další důležitou množinou regionů je tzv. doplněk. Účel bude vysvětlen
podrobněji v dalším textu této kapitoly.
Definice 13. (doplňkový kulový ρ–rozdělující region řádu n) Je dán metrický
prostor (M, d), libovolné c ∈ M , r ∈ R a kulová ρ–rozdělující funkce bpsn,ρ .
Potom doplňkový kulový ρ–rozdělující region řadu n je množina REGn,ρ
¬ ⊆
P ({0, 1, −}n ) taková, že
n,ρ
(x); ∀x ∈ M ; d(c, x) ≥ r}
REGn,ρ
¬ (c, r) = {bps
zkrácený zápis
Stejně jako v případě množiny REGn,ρ , je třeba učinit pozorování umožňující efektivní použití množiny.
Pozorování 6. (Vlastnosti REGn,ρ
¬ )
i
i
i
1. Pokud (. . . , 0, . . .) ∈ REGn,ρ
¬ (c, r) pak také (. . . , −, . . .), (. . . , 1, . . .) ∈
n,ρ
REG¬ (c, r)
i
i
n,ρ
2. Pokud (. . . , −, . . .) ∈ REGn,ρ
¬ (c, r) pak také (. . . , 1, . . .) ∈ REG¬ (c, r)
n,ρ
3. Jaké hodnoty nabývá libovolná z bps1,ρ
i definujících REG¬ (c, r) lze určit
1,ρ
ze znalosti bpsi , c a r.
Důkaz. Existují tři základní případy podle vzdálenosti p a c.

bps1,ρ
 ≤ rp − ρ
i ∈ {0, 1, −} viz obrázek 3.5a
|d(p, c) − r| < rp + ρ
bps1,ρ
viz obrázek 3.5a
i ∈ {1, −}

1,ρ
jinak
bpsi ∈ {1}
viz obrázek 3.5a
KAPITOLA 3. D-INDEX
(a) |d(p, c) − r| ≤ rp − ρ
48
(b) |d(p, c) − r| < rp + ρ
(c) |d(p, c) − r| ≥ rp + ρ
Obrázek 3.5: REGn,ρ
¬
Poslední množina regionů, která bude definována, popisuje průnik prostoru s prstencem. Zvlášť důležitá je proto, že umožňuje realizovat algoritmus
řešení kNN dotazů.
Definice 14. (prstencový ρ–rozdělující region řádu n) Je dán metrický prostor (M, d), libovolné c ∈ M , ri , ro ∈ R splňující podmínku ri ≤ ro a kulová
ρ–rozdělující funkce bpsn,ρ . Potom prstencový ρ–rozdělující region řadu n je
n
množina REGn,ρ
⊆ P ({0, 1, −} ) taková, že
n,ρ
REGn,ρ
(x); ∀x ∈ M ; ri ≤ d(c, x) < ro }
(c, ri , ro ) = {bps
zkrácený zápis
Aby bylo opravdu možné využít definovanou množinu ke zjišťováním odpovědí na kNN dotazy, je potřeba učinit několik následujících pozorování.
Pozorování 7. (Vlastnosti REGn,ρ
)
n,ρ
1. REGn,ρ
(c, ro ) ∩ REGn,ρ
(c, ri , ro ) = REG
¬ (c, ri )
n,ρ
Důkaz. Z definic pojmů REGn,ρ , REGn,ρ
¬ a REG platí (po částech
splňovaná konjunkce x ∈ M ; ri ≤ d(c, x) < ro )).
2. Je dána REGn,ρ (c, r) a ať existuje rostoucí posloupnost ( dělících poloměrů)
, rk ∈ R taková, že r0 = 0 a rk = r pak REGn,ρ (c, r) =
S r0 , . . .n,ρ
REG (c, ri , ri+1 )
i=0...k−1
3. Jaké hodnoty nabývá libovolná z bps1,ρ
definujících REGn,ρ
(c, ri , ro ) lze
i
,
c
a
r.
určit ze znalosti bps1,ρ
i
KAPITOLA 3. D-INDEX
49
Důkaz. Část 1 pozorování 7 spolu s pozorováními 5 a 6.
Příklad 8. (Prstencový ρ–rozdělující region řádu n = 3) Úkolem je zjistit
REG3,ρ
(R, ri , ro ), viz obrázek 3.6.
Obrázek 3.6: Prstencový ρ–rozdělující region REGn,ρ
(R, ri , ro )
Stačí si uvědomit, že díky části 1 pozorování 7 lze řešení nalézt průnikem
3,ρ
REGn,ρ a REGn,ρ
(s vnějším poloměrem ro )
¬ . Nejprve se „spočítají“ REG
a REG3,ρ
(s
vnitřním
poloměrem
r
)
viz
obrázky
3.7.
Množiny se proniknou
i
¬
3,ρ
a dají vzniknout REG (R, ri , ro ) viz obrázek 3.6.
(a) Doplňkový region
(b) Vnitřní region
Obrázek 3.7: ρ–rozdělující regiony REGn,ρ (R, ri ) a REGn,ρ
¬ (R, ro )
KAPITOLA 3. D-INDEX
50
V příkladu je použito stejné rozdělení prostoru, jaké zobrazeno na obrázku
3.2. Výsledek může být popsán v řeči definovaných množin následující tabulkou 3.1.
Existující množ.
REGn,ρ (R, ri )
REGn,ρ
¬ (R, ro )
REG3,ρ
(R, ri , ro )
≈
reg pro REG3,ρ
reg≈ pro REG3,ρ
¬
reg≈ pro REG3,ρ
S03,ρ
∃
x
x
-
S13,ρ
¬∃
x
-
S23,ρ
∃
x
x
-
S33,ρ
¬∃
x
-
S43,ρ
∃
x
x
x
x
x
x
S53,ρ S63,ρ S73,ρ X 3,ρ
∃
∃
∃
∃
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
- lze vynechat
x musí se testovat)
reg≈ viz definice 15
Tabulka 3.1: Množiny vybrané průniky oblastí
Stejný průnik lze dosáhnout s jinými hodnotami ri a ro . Možný způsob, jak
volit tyto poloměry, a díky části 2 pozorování 7 rozdělit na prstence iterativně
celý prostor, ukazuje příklad 10.
Zdrojem efektivního řešení dotazování je shrnutí společných vlastností
zavedených množin regionů následujícím pozorováním.
n,ρ
Pozorování 8. (Společné vlastnosti REG: REGn,ρ , REGn,ρ
¬ nebo REG )
i
i
i
1. Pokud (. . . , 0, . . .), (. . . , 1, . . .) ∈ REG potom také (. . . , −, . . .) ∈ REG.
Důkaz. separace+symetrie+vlastnosti REG
Umožňuje omezit možnou mohutnost REG ( P ({0, 1, −}n ).
i
2. Pokud |REG| > 1 ⇒ ∃i; (. . . , −, . . .) ∈ REG
i
i
Důkaz. Z předpokladu ∃i; (. . . , x, . . .), (. . . , y , . . .) ∈ REG ∧ x 6= y zbytek plyne z části 1 pozorování 8.
3. Prvky reg ∈ REG lze uspořádat lexikograficky tak, že se definuje uspořádání hodnot 0 < − < 1.
KAPITOLA 3. D-INDEX
51
Umožňuje generovat REG iterativně. Spolu s ostatními vlastnostmi
je právě toto uspořádání výhodné, protože pro separovatelné množiny
koreluje s lexikografickým uspořádáním poloh objektů ve vztažné soustavě.
4. Pokud ∃i ∀regi ∈ reg ∈ REG; regi = − potom ∀reg ∈ REG určují
vyloučené regiony.
Umožňuje zjednodušit testování, zda REG obsahuje nevyloučený region.
nebo
Definice 15. (Aproximace množin regionů REG: REGn,ρ , REGn,ρ
¬
n,ρ
REG ) Obsah množiny regionů REG lze aproximativně popsat posloupností reg≈ ∈ {{0} , {0, −} , {−} , {−, 1} , {1} , {0, −, 1}}n délky n kódující
vždy alespoň regiony obsažené v REG (jedná se o odhad shora). Složky
regi≈ ∈ reg≈ budou definovány předpisem3 .

{0}
∀reg ∈ REG; regi ∈ reg : regi = 0




{0, −}
¬∃reg ∈ REG; regi ∈ reg : regi = 1



{−}
∀reg ∈ REG; regi ∈ reg : regi = −
regi≈ =
{−, 1}
¬∃reg ∈ REG; regi ∈ reg : regi = 0




{1}
∀reg ∈ REG; regi ∈ reg : regi = 1



{0, −, 1}
jinak
Pozorování 9. (Společné vlastnosti reg≈ )
1. Z vlastností množin regionů REG plyne, že lze aproximaci efektivně
spočítat v čase úměrném délce posloupnosti n.
2. Aproximace mají vlastnosti jako množiny REG. Jedná se však pouze o
„šablonu“ prvků. Obecně je aproximace pouze „horním odhadem“ REG,
protože průniky s jednotlivými regiony se řeší nezávisle4 .
Příklad 9. (Řešení příkladu 8, prstencový ρ–rozdělující region řádu n = 3,
pomocí aproximace)
Na příkladu 8 lze ukázat, že pro proniknutý prstenec (viz obrázek 3.7) určený aproximací je nutné „navíc“ testovat např. S53,ρ . Důvodem je rozvolnění
vztažné soustavy (viz pozorování 9, část 2), což je možné geometricky popsat
Hodnota regi≈ závisí na všech reg ∈ REG, přesněji na jejich hodnotách regi ∈ reg.
Je možné si to představit tak, že vztažná soustava n pivotů se „rozpadne“ na n vztažných soustav určených vždy právě jedním z původních n pivotů.
3
4
KAPITOLA 3. D-INDEX
52
tak, že pivot Pi definující bps1,ρ
leží na libovolném místě kružnice d(R, Pi )
i
(viz obrázek 3.8).
Obrázek 3.8: Rozvolnění vztažné soustavy
Aproximace obecně rozšiřují mohutnosti průniku oblastí s dělícími regiony. Tato skutečnost je demonstrována v příkladu 8, v tabulce 3.1 srovnávající
množiny regionů a jejich aproximace.
Při úvaze jak volit dělící poloměry ri pro prstence jsou v této práci zohledněny tyto body:
1. Průnik s vyloučenou oblastí − ∈ reg znamená buď testování X n,ρ nebo
dalšího, rekurzivně vzniklého, dělení vyloučené části prostoru.
2. Vhodné je minimalizovat počet oblastí proniknutých prstencem, ale
zároveň maximalizovat šířku prstenců.
3. Jednoduché zjišťování ri .
Zvolené dělení generuje pro každý pivot 4 poloměry podle minimálních
vzdáleností od centra k hranicím kulového regionu pivotu. Shrnutí je uvedeno
v následující tabulce 3.2.
ri−
ro−
ri+
ro+
|(r − ρ) − d(p, c)|
bližší vnitřní
|(r + ρ) − d(p, c)|
bližší vnější
(r − ρ) + d(p, c) vzdálenější vnitřní
(r + ρ) + d(p, c)
vzdálenější vnější
Tabulka 3.2: Dělící poloměry
poloměr
poloměr
poloměr
poloměr
KAPITOLA 3. D-INDEX
53
Pro obecné n se dělící poloměry získají následovně:
1. r0 = 0, r4·n+1 = d+ .
2. r1 , . . . , r4·n vzniknou seřazením dělících poloměrů všech pivotů.
Poloměry jsou vybrány tak, že odpovídají hranicím oblastí určených jednotlivými bps1,ρ
i . Důvodem je snaha minimalizovat počet nově proniklých
oblastí oproti již testovaným prstencům. Pokud se vede seznam již zpracovaných regionů, a aproximací množin regionů, lze dělení „dobře“ použít i pro
průniky prstenců zadaných aproximacemi. Za povšimnutí stojí fakt, že prstence jsou určeny i bps1,ρ
= −. To zohledňuje hierarchii dělení vytvořeného
i
rekurzivně z vyloučených oblastí.
Příklad 10. (Volba 0 = r0 , . . . rk = d+ pro rozdělení prostoru pomocí prstencového ρ–rozdělujícího regionu řádu n = 3)) Příklad se opět opírá o rozdělení
prostoru z obrázku 3.2, použité v příkladu 8.
Obrázek 3.9: Dělící poloměry pivotu P1
r0 = 0, postupně se zjistí další dělící poloměry všech pivotů P1 , P2 , P3 a
přidá se poslední poloměr r13 = d+ . Výsledná posloupnost vznikne seřazením. Pro pivot P1 je situace ilustrována obrázkem 3.9. Výpočet pro všechny
tři pivoty spolu s uspořádáním hodnot poloměru je ilustrováno následujícími
obrázky 3.10 a 3.11.
Geometrickou představou řešení je promítnutí pivotů na společnou osu
s centrem prstenců (viz 3.10) a nanesení dělících poloměrů na ni (projekce
regionu kolem pivotu na osu). Vznikne tak uspořádání ri určené vzdáleností
od centra (viz 3.11 zobrazující uspořádané dělící poloměry pivotů P1 , P2 , P3 ).
Výsledné dělení prostoru prstenci je ilustrováno obrázkem 3.12.
KAPITOLA 3. D-INDEX
Obrázek 3.10: Projekce pivotů na osu
Obrázek 3.11: Uspořádání dělících poloměrů
Obrázek 3.12: Dělení prstenci pro pivoty P1 , P2 , P3
54
KAPITOLA 3. D-INDEX
3.2
55
Popis
Nyní lze přejít k realizaci datové struktury D-Index, na základě definic a
vlastností z předchozí části kapitoly.
Separovatelné množiny (včetně těch vzniklých rekurzivním dělením) slouží k uchování jednotlivých shluků objektů z oblastí popsatelných průniky ku1,ρ
lových regionů (bps1,ρ
i = 0) a doplňků kulových regionů (bpsi = 1). Množina
vyloučených slouží jako záchytný aparát objektů, pro které nelze jednoznačně
rozhodnout o náležení do vnitřní resp. vnější části dělení některé bps1,ρ
i .
Příklad 11. (Rozdělení objektů)
Obrázek 3.13: Rozdělení objektů v prostoru
Obrázek 3.13 zobrazuje rozdělení prostoru s 11 objekty pomocí kulové ρ–
rozdělující funkce prvního řádu bps1,P,d,ρ na tři oblasti: I (Inner) – vnitřní,
O (Outer) – vnější a X (eXclusion) – vyloučení. Náležení objektů je shrnuto
v následující tabulce 3.3.
Oblast
Vnitřní
Vnější
Vyloučení
P
O4
O8
Objekty
O1 O2 O3
O5 O6 O7
O9 O10
Tabulka 3.3: Rozdělení objektů (není řešeno skutečné uspořádání)
Rekurzivní princip dělení prostoru lze popsat iterativním algoritmem.
Každá iterace i vyžaduje vlastní bpsni ,ρ (postavenou nad vztažnou sousta-
KAPITOLA 3. D-INDEX
56
vou ni pivotů), dělící objekty vyloučené v předchozích iteracích5 . Na počátku
(v iteraci 0) lze chápat všechny objekty jako vyloučené. Rekurzivní proces
končí, pokud již „nemá smysl“ zbývající objekty dělit do shluků. V této práci
je jako kritérium dělení zvolena podmínka minimální mohutnosti množiny
vyloučených.
Každá iterace vytváří jednu úroveň indexu s vlastní vztažnou soustavou
a dělením bpsni ,ρ . Konkrétní objekt je zařazen buď do separovatelné množiny
některé z úrovní (první takovou, kde nebyl vyloučen), nebo do záchytné množiny vyloučených. Množiny6 objektů lze v indexu reprezentovat jako seznam
záznamů obsahující:
• Identifikaci objektu v databázi.
• Polohu ve vztažné soustavě úrovně (kde je uložen), nebo množiny vyloučených (pokud byl vyloučen na všech úrovních).
Tyto seznamy budou dále označovány jako buckety 7 .
Příklad 12. (Rekurzivní dělení prostoru)
Obrázek 3.14: Dělení prostoru
Pro bps2,ρ (resp. bps2,P1 ,d1 ,ρ1 ,P2 ,d2 ,ρ2 ) vznikají při dělení dané úrovně až 4
buckety pro nevyloučené oblasti. Na obrázku 3.14 jsou označeny A, B, C, D.
5
Z rekurzivního způsobu dělení o nich stačí hovořit jako o objektech vyloučených v
předchozí iteraci i − 1.
6
separovatelné i vyloučení
7
V některých textech je pro tento termín používáno české slovo „kapsa“.
KAPITOLA 3. D-INDEX
57
Oblast označená X je úrovní vyloučena a dále dělena pomocí bps1,ρ (resp.
bps1,P3 ,d3 ,ρ3 ). Na obrázcích 3.15 je vyznačen vznik dvou dalších bucketů pro
nevyloučené oblasti I a O. Vyloučený zbytek se již dál nedělí a je reprezentován
bucketem pro množinu vyloučených X viz obrázek 3.15b.
(a) Vyloučená oblast
(b) Rozdělení jednou bps (c) Vyloučení zbylé oblasti
Obrázek 3.15: Rekurzivní dělení vyloučených oblastí
Dále se rozlišují dvě dvě formy jednotlivých bucketů – logická a fyzická,
s následujícím významem:
• Logický bucket – Udržován jako součást indexu. Reprezentuje seznam
záznamů pro jednu množinu (viz výše).
• Fyzický bucket – Uložen na externím úložišti. Obsahuje objekty datové
sady.
(a) Indexace a dotazování
(b) Oblasti odpovědi
(c) Bucket oblasti
Obrázek 3.16: D-Index
Pro každý fyzický bucket existuje právě jeden logický bucket, ale opačně to
platit nemusí (je zbytečné vytvářet fyzické reprezentace prázdných bucketů).
Ve skutečnosti je to chápáno tak, že logická a fyzická část tvoří jeden celek.
Je možné na to nahlížet tak, že logická část tvoří index nad fyzickou částí.
KAPITOLA 3. D-INDEX
58
V této práci byl jako indexační mechanismus v bucketech zvolen přístup podobný LAESA (viz algoritmus 2) využívající uspořádání objektů a metrické
axiomy. Záznamy v bucketech jsou lexikograficky uspořádány podle polohy
ve vztažné soustavě úrovně. Při vyhledávání stačí už jen prohledat konkrétní
část logického bucketu a dokonce obvykle ještě méně z jeho fyzické části8 .
Obrázek 3.17: Dotazování v logickém bucketu
Pokud se v bucketu hledají záznamy z oblasti obsažené v průniku s
(Q, rQ ), je nejprve v lexikografickém uspořádání omezen úsek, ve kterém
se může průnik nacházet (na obrázku 3.17 v oblasti označené „testované záznamy“ 9 ). Z důvodu lexikografického uspořádání je však výběr omezen pouze
vzhledem k prvnímu pivotu P1 (resp. pivotu Pi pokud d(P1 , Q) = . . . =
d(Pi−1 , Q)). Dále se proto „testované záznamy“ filtrují pomocí LP∞ vůči celé
vztažné soustavě úrovně10 . Načítají se pouze objekty pro neodfiltrované „testované záznamy“ a počítá se pro ně vzdálenost d(Q, O). Na obrázku 3.17
obsahuje odpověď 2 objekty.
Pozorování 10. (Číslování bucketů úrovně) Pro úroveň dělenou bpsn,ρ může
vzniknout až 2n bucketů pro nevyloučené oblasti a 1 bucket pro vyloučenou11 .
Jak plyne z definice 10, lze buckety číslovat. Definované očíslování kóduje pro
každou bps1,ρ
informaci, zda vznikla z vnitřní nebo z doplňkové oblasti pivota
i
i
i
pi . Pro (. . . , 0, . . .) je uvnitř a pro (. . . , 1, . . .) v doplňku.
Speciálně 1 = (1, . . . , 1) je doplněk všech oblastí (průnik doplňků) a o =
(0, . . . , 0) oblast průniku všech vnitřních oblastí.
8
Další filtrování metrikou LP∞ .
Pomocí odhadu mezních vektorů vzdáleností z polohy Q a poloměru rQ . Skutečné
meze jsou však poté nastaveny podle existujících záznamů.
10
Záznamy obsahují vektory poloh objektů. Pro Q se vektor polohy spočítal při zařazování na konkrétní úroveň D-Indexu.
11
Pokud není rekurzivně dělena.
9
KAPITOLA 3. D-INDEX
59
Příklad 13. (Buckety)
(a) Číslování a obsah
(b) Logické rozložení
Obrázek 3.18: Buckety
Pro dělení bps3,ρ úrovně může vzniknout až 23 = 8 bucketů pro nevyloučené oblasti a 1 bucket pro vyloučenou. Na obrázku 3.18a je vytvořeno
celkem 7 oblastí (včetně vyloučené) z nichž pouze 4 jsou neprázdné. V praxi
to znamená vznik 9 logických bucketů, a pro 4 z nich i fyzických částí. Mapování logických a fyzických bucketů (lexikografické uspořádání záznamů podle
vektorů poloh ve vztažné soustavě) je znázorněno na obrázku 3.18b.
Pro každou úroveň i existuje právě 2ni − 1 logických a až 2ni − 1 fyzických
bucketů. Typicky nejsou všechny oblasti dělení neprázdné. Fyzické reprezentace prázdných bucketů je zbytečné udržovat. Zároveň sice bývá i méně než
2ni −1 oblastí dělení celkově, ale pokud je počet o hodně menší, je snadné nahlédnout, že byla nevhodně zvolena množina pivotů. Proto lze předpokládat
existenci 2ni − 1 logických bucketů12 .
Indexované objekty Oi ∈ S jsou zahašovávány do jednotlivých logických
bucketů a následně ukládány do souborů jejich fyzických reprezentací na externí úložiště. Proto se zde hovoří o externím hašování. Při vkládání objektu
je třeba nejprve nalézt první úroveň (v pořadí rekurzivního dělení), kde není
objekt vyloučen, a na ní oblast kam náleží (nebo je zvolena vyloučená oblast).
12
Navíc to usnadňuje práci s nimi.
KAPITOLA 3. D-INDEX
60
Do bucketu, který ji reprezentuje, je objekt vložen. Pro vyhledávání je princip
analogický. U rozsahových dotazů je zpracování rozšířeno o možnost výběru
několika oblastí pro každou testovanou úroveň (včetně vyloučené oblasti). U
kNN dotazů je princip řešení rozsahových dotazů upraven pro zpracování prstencových oblastí dotazu v několika iteracích, viz příklad 10. Proces průchodu
úrovněmi D-Indexu končí13 , pokud na testované úrovni není vybrána oblast
vyloučení, nebo při ověření vyloučené oblasti poslední úrovně. Je dobré si
uvědomit, že z pozorování 8 plyne, že pokud jsou na nějaké úrovni testovány
více než dvě oblasti, určitě je alespoň jedna z nich vyloučená oblast.
Příklad 14. (D-Index)
Obrázek 3.19: Hierarchie D-Indexu
Na obrázku 3.19 je zobrazen příklad D-Indexu s pěti úrovněmi. První dvě
úrovně obsahují 16 bucketů, další dvě 8 bucketů a poslední úroveň 2 buckety.
Vztažné soustavy jsou určeny celkem 15 (konkrétně 4+4+3+3+1) pivoty. Objekty vyloučené na poslední úrovni jsou uloženy v bucketu množiny vyloučených.
Obrázek ukazuje i princip dotazování postupným zkoušením zařazení objektu na konkrétní úrovni resp. do množiny vyloučených.
13
Buď zcela, nebo u kNN dotazů jedna iterace.
KAPITOLA 3. D-INDEX
3.3
61
Parametry a vlastnosti
Jak je uvedeno v úvodní kapitole 1, metrické přístupové metody mají obvykle řadu parametrů ovlivňujících jejich chování. D-Index se v tomto neliší
a umožňuje přizpůsobení se konkrétní aplikaci resp. datům. V této části kapitoly 3 jsou uvedeny obecné popisy a charakteristiky chování. Další informace
je možné najít v kapitole 5 i s jednotlivými experimenty a měřeními.
Parametry D-Indexu
Parametry je možné rozdělit do dvou skupin:
• globální – Jsou pro celou strukturu.
• lokální – Popisují danou úroveň14 .
Globální parametry
Počet úrovní – V rámci této práce není na výšku D-Indexu pohlíženo jako
na volný parametr. Výška roste v závislosti na vkládání objektů. Po
zaplnění vyloučené oblasti je vytvořena nová úroveň, která je určena
shluky původně vyloučených objektů.
Maximální mohutnost množiny vyloučených – Tento parametr určuje
práh velikosti, jehož dosažení znamená přidání úrovně D-Indexu, do níž
budou zařazeny původně vyloučené objekty. Je nutné si uvědomit, že
z nově zařazovaných objektů15 budou zřejmě opět některé vyloučeny.
Je otázkou volby lokálních parametrů nové úrovně, aby jich nebylo
vyloučeno mnoho.
Tento parametr slouží k definici kritéria přidávání úrovní, zvoleného v
této práci. Výhodou takto zvoleného kritéria je jednoduchost ověření
a snaha o zamezení přílišného počtu vyloučených objektů. Zároveň je
tento parametr zcela nezávislý na indexovaných datech. Nevýhodou
může být vyvolání vytváření nové úrovně s „nevhodnou“ množinou objektů16 .
14
Pro každou úroveň vlastní nastavení.
Vzhledem k procesu vkládání, který vedl k jejich původnímu vyloučení, je možné začít
jejich vkládání až na nově vytvářené úrovni.
16
Pro atypické rozložení X ( S může vzniknout „špatné“ rozdělení prostoru vzhledem k
ještě nezaindexovaným objektům S.
15
KAPITOLA 3. D-INDEX
62
Zejména volba pivotů může být množinou X ( S negativně ovlivněna17 .
Hlavním problémem zde není nemožnost nalézt pivoty, ale špatné chování způsobené závislostí na globálních vlastnostech datové sady. Je
snadné nahlédnout, že ne každá metoda výběru je ovlivněna ve stejné
míře. Například náhodný výběr (viz část kapitoly 2.4.1) není ovlivněn
tolik, jako výběr vzdálených pivotů 18 (viz část kapitoly 2.4.5). Problémy
se dají řešit zmírněním požadavků, které jsou kladeny vůči S.
Práh mohutnosti SizeLimit19 je vhodné volit dost velký na nalezení
reprezentativní množiny pivotů, ale mělo by platit SizeLimit |S|.
Lokální parametry
Množina pivotů P – Výběr pivotů ovlivňující dělení prostoru úrovně je
vyčleněn jako samostatný „parametr“ nejen z důvodu, že se typicky
řeší odděleně pomocí obecných metod20 , ale i kvůli přímému vztahu k
efektivní vnitřní organizaci bucketů úrovně. Nevhodně zvolené pivoty
tvoří špatné rozdělení prostoru21 a špatnou indexaci logického bucketu.
Jako vhodná volba se ukazuje použit některou z obecných metod. Ty
zajišťují výběr „dobré“ vztažné soustavy pro množinu objektů.
Poloměry určující bps1,ρ
pro pi ∈ P – Poloměry r a ρ definují regiony děi
lící prostor. Poloměr r ovlivňuje zejména vyváženost naplnění bucketů
úrovně a ρ separaci shluků. Jak jsou voleny hodnoty je uvedeno dále v
textu.
Volba parametrů D-Indexu
Problém je, jaká nastavení parametrů volit. Při úvaze nad řešením je možné
zformulovat několik základních cílů a během snahy o jejich dosažení nalézt
konkrétní výběr (nebo alespoň omezení) hodnot parametrů:
Výstavba struktury v „rozumném“ čase – Z praktického hlediska je nezbytné umožnit co nejlepší výsledky v co nejkratším čase. Proto je kritérium časové složitosti podstatné. Je třeba si uvědomit, že důležitost
17
Je rozumné předpokládat, že není známé pořadí vkládaných objektů.
Metoda s doporučenými hodnotami vrací příliš málo pivotů a znehodnocuje tak index.
Problém lze řešit snížením prahu vzdáleností.
19
Použito stejné označení jako v pseudokódu v části kapitoly 3.4, věnované jednotlivým
operacím D-Indexu.
20
Obecné metody výběru pivotů, z nichž některé lze nalézt popsané v části kapitoly
2.4, jsou označovány jako výběr „globálních“ pivotů. V případě D-Index ale není každý
indexovaný objekt polohován vůči všem pivotům použitým v hierarchii D-Indexu.
21
Dokonce bez ohledu na volbu poloměrů bps1,ρ
i .
18
KAPITOLA 3. D-INDEX
63
času výstavby roste s dynamizací struktury. Navíc se zde nemusí jednat
o přebudování celého indexu. Úrovně indexu lze díky principu rekurzivního dělení prostoru budovat postupně.
Vyváženost naplnění bucketů úrovně – Z pohledu jednoho pivotu je význam jasný. Jde o požadavek vyváženosti poměru počtu objektů ve
vnitřní a vnější části. Pro n pivotů to znamená snahu o rovnoměrné zaplnění všech bucketů a v důsledku zkoumání všech možností vytvoření
průniků oblastí (pro pevnou množinu pivotů). To je navíc komplikováno
skutečností, že se úloha řeší pouze se znalostmi metrického prostoru.
Pokud je ale vhodně zvolena množina pivotů, lze jako dobré přiblížení
použít přístup analogický situaci pro jeden pivot. Poloměr vnitřních
oblastí se zvolí jako medián vzdáleností pivotu k objektům. Medián
je možné spočíst v čase O (|S|)22 algoritmem uvedeným v [14], jehož
upravená verze byla použita při implementaci v této práci.
.
Prakticky jde o problém hledání poloměrů r pro jednotlivé bps1,p,r,ρ
i
Separace shluků – Důvod je jasný. Pro dobře oddělené shluky dat je dobře
modelována jejich rozdílnost. Zároveň je těsnější i oblast obsahující
shluk (neindexuje se „mrtvý“ prostor). V ideálním případě končí v separujícím prstenci kolem shluku objekty, které jsou jistým způsobem
„řídký případ“, nepatří do oddělených shluků, ale tranzitivně je s daným prahem podobnosti propojují. Jednou z možností je volit všechny
prstence stejně široké. Povolit různé hodnoty však nepředstavuje implementačně větší problém a dovoluje větší flexibilitu přizpůsobení se.
Pokud je prstenec příliš široký, je vyloučena velká část prostoru (resp.
vnitřní oblasti). Pokud je prstenec příliš úzký, neseparuje shluky. V této
práci byl zvolen výpočet šířky prstence z funkční závislosti na poloměru
vnitřní oblasti.
Prakticky jde o problém hledání poloměrů ρ pro jednotlivé bps1,p,r,ρ
.
i
Minimalizace potřebných výpočtů poloh – Při vyhledávání se pro každou testovanou úroveň počítá poloha objektu v její vztažné soustavě.
Lze to přeformulovat tak, že se postupně dopočítává globální vektor
vzdáleností23 . Není tím ale myšlena snaha minimalizovat počet pivotů
úrovně, nebo minimalizovat počet úrovní.24 S postupným zachycováním indexovaných objektů úrovněmi „řídne“ i zaplnění úrovní děleného
22
Stejný je počet výpočtů vzdáleností d(Pi , Oj ).
Z hlediska práce D-Indexu je vždy třeba znát pouze část popisující polohu ve vztažné
soustavě úrovně.
24
Oboje by sice snížilo počet výpočtů vzdáleností, ale degradovalo by to indexaci.
23
KAPITOLA 3. D-INDEX
64
prostoru, proto je záměr takový, aby s rostoucí úrovní klesal počet separovatelných množin, ale ne příliš radikálně. Jak příliš jemné25 , tak
příliš hrubé (nerozlišuje shluky) dělení prostoru úrovně není výhodné.
Mapování prostoru – Pro každou úroveň D-Indexu je nutné nalézt „kvalitní“ množinu center bpsn,ρ . Pokud není vybrána dobře, dochází k degradaci rozdělení prostoru (mnoho prázdných separovatelných množin).
V takovém případě je dokonce možné vybrat k dělení bpsm,ρ (určené
podmnožinou bps1,ρ
definujících bpsn,ρ ) pro m < n a dosáhnou stejně
i
kvalitního rozdělení s menší vztažnou soustavou. V extrémním případě
jsou naplněny pouze buckety 1 a o (průnik všech doplňků resp. průnik všech vnitřních oblastí). V ideálním případě centra bps1,ρ
kopírují
i
centra shluků dat. Při dotazování je vyšší pravděpodobnost hledání odpovědi v rámci shluku (optimálně v jednom bucketu). Takto přímo to
ale může vést až k situaci chápání celého prostoru jako jediného shluku.
Se zvýšením počtu bps1,ρ
i nejen vzniká větší počet kulových oblastí (bez
ohledu na to, jak se překrývají), ale roste i dimenze vektorů poloh, které
lze efektivněji využít k filtraci při vyhledávání v logických bucketech.
Prakticky jde o problém hledání množiny pivotů úrovně určujících centra jednotlivých bps1,p,r,ρ
.
i
Minimalizace mohutnosti množiny vyloučených – Jak plyne z tvrzení
8, s rostoucím poloměrem dotazu roste pravděpodobnost, že bude třeba
otestovat další úroveň resp. vyloučený region. Spolu s rostoucím počtem
úrovní roste do jisté míry také šance na zachycení regionu dotazu. Zcela
obecně to ale platit nemusí. Dokonce je zcela korektní, že oblast nevyloučená úrovní i může na úrovni i + 1 spadat do vyloučené oblasti
(částečně či zcela).26 S rostoucím poloměrem dotazu tedy roste pravděpodobnost nutnosti testovat vyloučenou oblast. I vyloučená oblast je
reprezentována bucketem, jen není zřejmé, jak volit vztažnou soustavu
vyloučené oblasti. Z hlediska umožnění dynamizace byl zvolen takový
přístup, že poloha se měří vůči prvnímu vyloučenému objektu.27 To dovoluje zachovat dobré vlastnosti filtrace logického bucketu. Nicméně to
zcela ignoruje rozprostření vyloučených dat. Počet vyloučených objektů
by proto neměl být příliš veliký.
25
S přidáním pivota roste exponenciálně počet možných průniků. A počítání vektoru
polohy vzhledem k dané úrovni probíhá vždy při vkládání i vyhledávání.
26
Prostor je parcelován na každé úrovni celý, jen počet objektů k rozdělení klesá.
27
Pokud se přidávají objekty postupně, není na začátku žádná vztažná soustava, vůči
které měřit polohu.
KAPITOLA 3. D-INDEX
65
Prakticky se jedná o práh počtu, kdy se má vyloučena oblast rozdělit
a přidat jako další úroveň D-Indexu.
Zaplnění bucketů – Na tento bod je možné pohlížet v kontextu jednotlivých úrovní i celého indexu28 . Nejedná se o stejný problém jako je
vyváženost naplnění bucketů úrovně. Vyvážení splňuje i situace, kdy je
v bucketech „podobně málo“ záznamů. Zaplnění jen shrnuje myšlenku,
že přílišná granulace prostoru není výhodná29 .
Výše zformulované požadavky na volbu parametrů nejsou vzájemně nezávislé, některé jdou spolu, jiné proti sobě. Zároveň závisí na předpokládaném
dotazování (a na optimalizaci struktury pro něj). To vyvolává otázku, zda
není vhodné v konkrétním případě změnit sadu požadavků30 . V této práci se
přistupovalo k výstavbě obecně.
Výstavba D-Indexu
Struktura vybudovaného indexu závisí samozřejmě také na přístupu k indexovaným datům. Ostatně to lze nahlédnout z textu uvedeného výše. Podle
indexace datové sady je rozdělení následující.
Statická výstavba – V momentě výstavby indexu je dostupná celá datová
sada. Iterativní proces rekurzivního dělení vždy pracuje s ještě nezaindexovanou částí datové sady31 . Výběr pivotů i výpočet poloměrů oblastí
má na vstupu vždy všechny vyloučené objekty S.
• Výhody jsou zřejmé, pro dělení je poskytováno maximální množství dostupných informací.
• Nevýhodou je zejména velká časová i prostorová náročnost, daná
prací s velkým objemem dat. Navíc se jako nevýhodná jeví i tendence vytvářet v úvodních iteracích příliš dělené úrovně, to je ale
možné ovlivnit nastavením metody výběru pivotů.
Dynamická výstavba – Objekty jsou vkládány po jednom (v pořadí o kterém nelze nic předpokládat). Proces výstavby probíhá jako posloupnost
operací vložení objektu.
28
Rozdíl je v důrazu kladeném na zaplnění. Buď lze uvažovat odděleně každou úroveň
zvlášť, nebo globální „průměr“ všech bucketů indexu.
29
Již z důvodu minimalizace potřebných výpočtů poloh by nemělo dojít k situaci, kdy je
v rámci celé hierarchie zvoleno příliš pivotů.
30
Je možné například optimalizovat strukturu umístěním často dotazovaných objektů
na nižší úrovně (růst ve směru rekurzivního dělení).
31
Na začátku se vybírá z celé S.
KAPITOLA 3. D-INDEX
66
• Výhodou je možnost omezit nároky na vytvoření nové úrovně a
skutečnost, že se při vkládání pracuje pouze s jedním objektem
resp. s množinou vyloučených (pokud se vytváří nová úroveň).
Podstatné je ale to, že při operaci vložení objektu je vytvářena
vždy maximálně jedna úroveň. Navíc úvodní vytvářené úrovně se
tolik neliší v jemnosti dělení.
• Nevýhodou je možnost vytvoření „špatné“ struktury indexu pro
určité posloupnosti vkládání objektů.
Ovlivnění struktury typem výstavby se projevuje (mimo poloměrů bps1,ρ
i )
i na „tvaru“ D-Indexu, pro metody s proměnným počtem vybraných pivotů,
jako je výběr vzdálených pivotů (viz část kapitoly 2.4.5) a výběr levných pivotů
(viz část kapitoly 2.4.6).
Příklad 15. Následující obrázky 3.20 ukazuji výše uvažované „tvary“ struktury D-Indexu32 . Výška značí výšku D-Indexu a šířka maximální počet separovatelných množin úrovně. Je samozřejmě možné vytvořit konfigurace nezachycené na obrázcích, ale vyžadovalo by to „ruční“ zásah, nebo zcela atypická
data.
(a) Nízký strmý
(b) Vysoký nezjemňující
(c) Vhodný kompromis
Obrázek 3.20: Možné „tvary“ struktury D-Indexu
Dobré je si uvědomit, že obrázek 3.20c modeluje i typické rozložení množství zaindexovaných objektů. Není tím myšlena nějaká funkční závislost počtu
objektů úrovně a jemnosti jejího dělení. Pouze to shrnuje výše uvedený fakt,
popisující obvyklé klesání obsazení úrovní33 .
Dále je zřejmé, že pokud není možné dobře rozdělit prostor na jedné úrovni
(byla by příliš „široká“ 34 ), není problém vyloučit i celé shluky (pro některé
bps1,ρ
se zvolí ρ ≈ r) a ty pak postupně zaindexovávat na dalších úrovních.
i
32
Viz snaha o minimalizaci potřebných výpočtů poloh.
Viz snaha minimalizace potřebných výpočtů poloh.
34
Příliš logických bucketů.
33
KAPITOLA 3. D-INDEX
67
Pro statickou výstavbu je tendence vytvářet postupně úrovně s klesajícím počtem pivotů (resp. separovatelných množin). Důvodem je menší množství objektů splňující podmínky výběru, založené na vlastnostech celé datové
sady. Díky větším možnostem nastavení je méně ovlivnitelný výběr levných
pivotů. Pokud se totiž upraví nastavení výběru vzdálených pivotů 35 , vrací v
prvních iteracích dělení ještě více pivotů a výsledek je obdobný původním
hodnotám. Navíc příliš mnoho pivotů má negativní vliv na indexaci (viz text
výš).
Při dynamické výstavbě není vliv metod takový jako při statické výstavbě,
viz popis parametru maximální mohutnost množiny vyloučených. Různé posloupnosti vkládání objektů sice ovlivňují výstavbu, ale extrémně špatné chování není obvyklé.
Z praktického hlediska se v testech neukázala zvláštní výhodnost statické výstavby. Smysl má spíš z pohledu vytvoření specializovaných metod
dělení prostoru. Nemusí se jednat o generické metody, ale přístupy využívající například charakteristické vlastnosti objektů datové sady. Naproti tomu
dynamická výstavba poskytuje obecně dobré výsledky, pokud se daří držet
pod kontrolou chování metod výběru pivotů volaných na části datové sady.
Další nezanedbatelný faktor je rychlost výstavby. I ta vychází ve prospěch
dynamického přístupu.
Způsob, kterým je v této práci řešen D-Index umožňuje kombinaci obou
přístupů. V tom smyslu, že lze přidávat nové objekty do staticky vybudované struktury a při naplnění množiny vyloučení se dynamicky přidá další
úroveň. Praktický význam to však má opět pouze v situaci, kdy lze statickým
vybudováním zajistit výrazně kvalitnější index.
3.4
Operace
Tato část rozebírá konkrétní řešení podporovaných a implementovaných operací D-Index, včetně popisu jejich vlastností, s využitím definic a principů
popsaných v předchozích částech této kapitoly. Nejprve je uvedena výstavba
indexu, pak vkládání objektů a nakonec jsou popsány algoritmy řešící dotazování (bodové, rozsahové a na k nejbližších). Algoritmy resp. klíčové části operací jsou zachyceny prostřednictvím pseudokódu. Použitý pseudokód (platí
to pro celou práci, ale v této části je to klíčový prvek) používá syntaxi blížící
se programovacímu jazyku C/C++. Jsou označeny vstupy i výstupy algoritmů. V případě práce s globálními informacemi (úrovně D-Indexu a množina vyloučených) je explicitně uveden seznam informací (je označen jako
35
Snížením prahu vzdáleností.
KAPITOLA 3. D-INDEX
68
data algoritmu), se kterými se manipuluje. Samostatné operace jsou označovány jako algoritmy, zatímco pomocné části (obyčejně sdílené více algoritmy)
jsou popisovány jako procedury resp. funkce.
Pokud se v této části hovoří o složitosti, myslí se tím časová složitost.
Jinak je to explicitně rozlišeno. Prostorová složitost je většinou zřejmá.
3.4.1
Stavba indexu
Samostatně je řešena pouze statická výstavba, protože dynamická je opravdu
pouze řetězcem volání metody insert (algoritmus 8 viz část kapitoly 3.4.2).
Samotný princip výstavby byl probrán výše, nyní je uveden pseudokód.
Algoritmus 4: statická výstavba – DIndex
Vstup: Datová sada S
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
X = S;
/* Vybudování indexu.
*/
while |X| > SizeLimit do
/* Přidá úroveň a objekty zaindexuje / vyloučí, detaily
funkce 5 na straně 69.
*/
X = AddLevel(X);
end
/* Uložení vyloučených objektů.
*/
foreach O ∈ X do
/* Vložení do vyloučených, detaily funkce 7 na straně
72.
*/
InsertToExclusionSet(O);
end
Statická výstavba je řešena algoritmem 4. Z pseudokódu je vidět, že dochází k opakovanému zpracování objektů, které se nepodařilo v iteraci vytváření úrovně zaindexovat. K opakovanému zpracování dochází ale i při postupném vkládání objektů (tj. dynamická výstavba). Větším zpomalením je výběr
pivotů, resp. objem dat, která slouží jako kontext vytvářených úrovní. Kon-
KAPITOLA 3. D-INDEX
69
text tvoří množina objektů, které mají být ještě zaindexovány. Tato množina
je předávána funkci 5 (AddLevel).
Proces vytváření a přidávání úrovní pokračuje, dokud velikost kontextu
nesplňuje podmínku na mohutnost množiny vyloučených. Pokud je podmínka
splněna, je na každý objekt kontextu volána procedura 7 (InsertToExclusionSet), která vkládá objekty do bucketu vyloučených. Z kontextu se takto
vytvoří množina vyloučených a algoritmus skončí.
Složitost závisí na počtu vytvářených úrovní n a na počtu vyloučených objektů m. Obvykle m |S| a n m resp. n < C (pro vhodnou konstantu C).
Pro každou z n úrovní je jednou volána funkce AddLevel, a pro každý z m
vyloučených objektů se jednou volá funkce InsertToExclusionSet.
Funkce AddLevel(Y ⊆ S) – DIndex (přidání úrovně)
Vstup: Objekty vyloučené všemi úrovněmi Y
Výstup: Objekty O ∈ Y vyloučené přidanou úrovní
Data:
• Úrovně D-Indexu L
/* Vybere pivoty
*/
P = SamplePivots(Y);
/* Vytvoří novou úroveň s pivoty P
*/
level = new DIndexLevel(P, Y);
/* Přidání úroveň do struktur D-Indexu
*/
Append(L, level);
/* Zaindexování objektů
*/
foreach O ∈ Y do
/* Vložení na úroveň level, detaily funkce 6 na straně
70.
*/
if InsertOnLevel(level, O) then
Y = Y \ {O}; // Je zaindexovaný
end
return Y; // Y nyní obsahuje vyloučené objekty
Pro statickou i dynamickou výstavbu (resp. vkládání objektů) je důležité přidávání nových úrovní, řešené algoritmem funkce 5 (AddLevel). Na
vstupu je funkci předána množina objektů (tj. kontext), ze které jsou nejprve vybrány pivoty, a následně se vytvoří prázdná úroveň s pivoty v centrech
oblastí. Na základě kontextu jsou spočteny jednotlivé poloměry r a ρ (pro
KAPITOLA 3. D-INDEX
70
každou bps1,ρ
zvlášť).
i
Po vytvoření úrovně se do ní pomocí funkce 6 (InsertOnLevel) zkusí
vložit všechny objekty kontextu. Ty, co se podařilo zaindexovat, jsou z kontextu odstraněny. Zbývající objekty jsou vráceny na výstupu a tvoří „nový“
kontext.
Časová složitost funkce 5 (AddLevel) závisí na počtu pivotů k = |P| a
velikosti kontextu n = |Y|. Výsledná složitost je dána součtem složitostí 3
fází, do kterých je možné ji rozdělit:
1. Nalezení pivotů – Složitost je daná zvolenou metodou, viz část kapitoly
2.4.
2. Vytvoření prázdné úrovně (výpočet poloměrů r a ρ) – V této práci byl
použit způsob, který má složitost úměrnou součinu velikosti kontextu
a počtu pivotů O(k · n).
3. Vkládání objektů kontextu – Počet volání funkce 6 (InsertOnLevel)
je rovný n. Složitost je úměrná součinu velikosti kontextu a složitosti
InsertOnLevel.
Funkce 6 (InsertOnLevel) slouží k ukládání objektů na konkrétní úroveň, kterou spolu s vkládaným objektem dostává na vstupu. Na výstupu
funkce indikuje, zda se podařilo objekt vložit, nebo byl úrovní vyloučen. Nemanipuluje s množinou vyloučených.
Funkce InsertOnLevel(level ∈ L, O ∈ S) – DIndex (vložení na úroveň)
Vstup: Úroveň D-Indexu level ∈ L, Vkládaný objekt O
Výstup: true – Objekt vložen, false – Objekt vyloučen
/* Určí polohu a region ve vztažné soustavě úrovně
(vQ , regQ ) = Emplace(level, Q);
if Excluded(regQ ) then
return false; // Vyloučen
/* Vložení do bucketu na úrovni level
InsertToBucket(Bucket(regQ ), vQ , O);
*/
*/
return true; // Vložen
Složitost lze opět spočítat jako sumu složitostí jednotlivých fází. Veškeré
výpočty jsou řešeny vůči úrovni D-Indexu na vstupu.
KAPITOLA 3. D-INDEX
71
• Výpočet polohy ve vztažné soustavě a regionu kam objekt náleží –
Složitost je úměrná počtu pivotů. Pokud není objekt vyloučen, platí
len(vQ ) = len(regQ ) = P. Pro vyloučené objekty nemá smysl počítat
celý vektor umístění, platí len(vQ ) = len(regQ ) ≤ P. Je provedeno
len(vQ ) výpočtů vzdáleností a stejný počet elementárních operací porovnání pro výpočet regQ .
• Test vyloučení objektu (Excluded(regQ )) – Lze spojit s výpočtem
umístění.
• Přepočet regionu na bucket (Bucket(regQ )) – Lze spojit s výpočtem
umístění.
• Uložení objektu do bucketu – Probíhá pouze pro nevyloučené objekty.
Složitost přidání záznamu do logického bucketu je logaritmická vzhledem k počtu objektů v bucketu. Zapsání do fyzického bucketu je dáno
dobou zapsání dat objektu.
Další důležitou součástí statické výstavby a vkládání objektů je procedura 7 (InsertToExclusionSet), která ukládá objekty zadané na vstupu
do bucketu vyloučených. Bucket s vyloučenými objekty se řeší odděleně, protože vztažná soustava je volena jinak (poloha vůči prvnímu vyloučenému objektu) a při dosažení mezní velikosti je vytvořena nová úroveň D-Indexu (maximálně jedna pro každé „přetečení“). Objekty nezařazené do nové úrovně jsou
již bez testování mohutnosti uloženy do bucketu vyloučených. Manipuluje se
zde jak s množinou vyloučených, tak potenciálně i s úrovněmi D-Indexu.
Složitost, danou sumou složitostí jednotlivých fází, je třeba řešit samostatně pro dva případy, které mohou nastat při testu dosažení (spolu s vloženým objektem) meze mohutnosti množiny vyloučených.
1. Limit není dosažen (|X| + 1 ≤ SizeLimit) – Objekt ze vstupu je uložen do bucketu vyloučených. Princip je podobný úspěšnému vkládání
na některou úroveň D-Indexu:
• Spočte se poloha – Zvolená vztažná soustava je určená prvním vyloučeným objektem. Složitost je úměrná jednomu výpočtu vzdálenosti d(Oi , Oj ).
• Objekt se uloží do bucketu – Složitost přidání záznamu do logického bucketu je logaritmická vzhledem k počtu objektů v bucketu.
Zapsání do fyzického bucketu je dáno dobou zapsání dat objektu.
2. Limit je dosažen (|X| + 1 > SizeLimit) – Vyloučené objekty spolu
s objektem ze vstupu jsou použity k vytvoření nové úrovně. Z pohledu
KAPITOLA 3. D-INDEX
72
řešení ukládání mezi vyloučené je podstatné, že po vložení nemůže dojít k vícenásobnému vytváření nové úrovně. Teoreticky může dojít k
vytváření úrovně po každém vložení, ale pro vhodné nastavení a volbu
použitých algoritmů ve funkci 5 (AddLevel) je znovu vyloučeno pouze
n objektů (a platí n |X| + 1).
• Vytvoření nové úrovně (AddLevel(X ∪ {O})) – Složitost funkce 5
(AddLevel) je řešena výš.
• Uložení vyloučených objektů z vytvořené úrovně – Pro každý vyloučený objekt je spočtena poloha ve vztažné soustavě vyloučených (složitost je úměrná výpočtu vzdálenosti d(Oi , Oj )). Následně se přidá záznam do logického bucketu (složitost je logaritmická vzhledem k počtu objektů v bucketu). Zapsání do fyzického
bucketu je dáno dobou zapsání dat objektu.36
Procedura InsertToExclusionSet(O ∈ S) – DIndex (vložení do vyloučených)
Vstup: Objekt O vyloučený všemi úrovněmi D-Indexu
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
if |X| < SizeLimit then
/* Určí polohu ve vztažné soustavě množ. vyloučených
vO = Emplace(O);
/* Uloží O na pozici lexikografického pořadí polohy
InsertToBucket(X, vO , O);
return; // X není přeplněná (|X| ≤ SizeLimit)
end
*/
*/
/* Přidá úroveň a objekty do ni zaindexuje / vyloučí je */
Y = AddLevel(X ∪ {O}); // Detaily viz funkce 5 na straně 69.
/* Vloží vyloučené objekty.
*/
X = ∅; // Změna X
36
Jinými slovy, provede se uložení podle bodu 1 (bez testu mohutnosti množiny vyloučených).
KAPITOLA 3. D-INDEX
73
foreach O ∈ Y do
/* Určí polohu ve vztažné soustavě množ. vyloučených */
vO = Emplace(O);
/* Uloží O na pozici lexikografického pořadí polohy */
InsertToBucket(X, vO , O);
end
3.4.2
Vkládání objektů
Předchozí část byla věnována statické výstavbě. Obsahuje ale také pomocné
funkce a procedury pro vkládání objektů, kterým je věnována tato část kapitoly 3.
Vkládání objektů řeší algoritmus 8 dostávající na vstupu přidávaný objekt. Pokusí se jej zaindexovat a uložit. Proces je vidět v pseudokódu. Nejprve se postupně zkouší uložit objekt na některou úroveň pomocí funkce 6
(InsertOnLevel). Pokud je nalezna úroveň, ze které není vyloučen, algoritmus končí. V případě, že je objekt vyloučen všemi úrovněmi, je vložen
pomocí procedury 7 (InsertToExclusionSet) do vyloučených.
Ukazuje se, že s rostoucím pořadím úrovně klesá četnost vložení objektu
na ni a roste šance celkového vyloučení. Počet úrovní ale spolu s vylučováním
objektů postupně roste, a tak se četnost vyloučení udržuje „rozumně“ malá.
Složitost je možné rozdělit na dva základní případy:
1. Objekt byl uložen na některou úroveň. – Složitost viz popis funkce
6 (InsertOnLevel). Pro každou úroveň je tato funkce volána maximálně jednou. Pokud není objekt vyloučen, je měněn právě jeden bucket
(pokud ještě neobsahuje vkládaný objekt) a algoritmus končí.
2. Objekt byl vyloučen všemi úrovněmi. – Složitost viz popis procedury 7 (InsertToExclusionSet). Tato procedura je volána maximálně jednou, pokud pro všechny úrovně byla neúspěšně volána funkce
6 (InsertOnLevel). Při přeplnění vyloučených je vyvolán řetězec operací, vedoucí ke vzniku nové úrovně. Jedná se o nejhorší případ vzhledem ke složitosti. Pokud však není nastavení parametrů nevhodné, není
častý.
KAPITOLA 3. D-INDEX
74
Algoritmus 8: Vložení objektu – DIndex
Vstup: Vkládaný objekt O
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
/* Pokus o vložení do některé úrovně D-Indexu
*/
foreach level in L do
/* Pokus o vložení do bucketu na úrovni level, detaily
funkce 6 na straně 70.
*/
if InsertOnLevel(level, Q) then
return; // Vložen
end
/* Vložení do množiny vyloučených
*/
InsertToExclusionSet(O); // Detaily procedury na straně 72
3.4.3
Vyhledávání objektů
První z popisovaných algoritmů dotazování řeší bodové dotazy. Princip algoritmu 9 je jednoduchý. Proces hledání odpovědi je vidět v pseudokódu.
Nejprve se postupně zkouší nalézt na některé úrovni bucket, kam objekt náleží37 . Pokud je nalezna úroveň, ze které není vyloučen, algoritmus končí. V
opačném případě, objekt je vyloučen všemi úrovněmi, je hledán mezi vyloučenými.
Složitost v nejhorším případě nastává pro vyloučené objekty, které byly
na každé úrovni vyloučeny až poslední z testovaných bps1,ρ
(byly určeny poi
lohy ke všem pivotům) a neodfiltrovány logickým bucketem vyloučených (tzn.
byl čten fyzický bucket).
Ať je výška D-Indexu h. Jak již bylo řečeno dřív, četnost vyloučení objektu
s rostoucím počtem objektů klesá a zvyšuje se šance ukončení vyhledávání na
některé z h úrovní. V průměrném případě končí vyhledávání dřív než u množiny vyloučených. A komplexnější vztažné soustavy úrovní indexu umožňují
organizovat logické buckety efektivněji vůči filtrování dotazů. K prohledávání
bucketů slouží funkce SearchInBucket(bucket, vektor polohy, dotazovaný
objekt), řešící bodové dotazování nad logickým bucketem. Počet použití met37
V tom smyslu, že by tam byl při vkládání uložen.
KAPITOLA 3. D-INDEX
75
Algoritmus 9: Bodový dotaz – DIndex
Vstup: Dotaz Q
Výstup: Odpověď „Objekt nalezen“ resp. „Objekt nenalezen“
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
/* Pokus o nalezení na některé úrovni D-Indexu
foreach level in L do
/* Určí polohu a region ve vztažné soustavě úrovně
(vQ , regQ ) = Emplace(level, Q);
/* Dotaz je ve vyloučeném regionu úrovně
if Excluded(regQ ) then
continue; // Množina vyloučených
/* Pokus o nalezení v bucketu na úrovni level
if SearchInBucket(Bucket(regQ ), vQ , Q) then
return Objekt nalezen;
else
return Objekt nenalezen;
end
/* Určí polohu ve vztažné soustavě množiny vyloučených
vQ = Emplace(Q);
/* Pokus o nalezení v množině vyloučených
if SearchInBucket(X, vQ , Q) then
return Objekt nalezen;
else
return Objekt nenalezen;
*/
*/
*/
*/
*/
*/
riky d je určen sumou počtu zjišťovaných poloh vůči vztažným soustavám a
počtem objektů neodfiltrovaných metrikou LP∞ .
Podstatná vlastnost algoritmu bodových dotazů je to, že pro nalezení odpovědi nikdy není testován víc než jeden bucket a každá úroveň je testována
maximálně jednou. Pro ilustraci lze použít obrázek 3.21 rozsahového dotazu
s rozdílem, že dotazovaná oblast má poloměr rQ = 0.
KAPITOLA 3. D-INDEX
3.4.4
76
Rozsahové vyhledávání objektů
Rozsahové dotazy řeší D-Index snadno způsobem, zobecňujícím bodové dotazy. Algoritmus 10 rozsahového dotazu je opravdu jen o málo složitější než
algoritmus 9 bodového dotazu. V důsledku práce s celým kulovým regionem
dotazu není při testování průniku s dělením úrovně vracen pouze jeden region
(separovatelný resp. vyloučený), ale celá množina regionů (kódovaná aproximací, viz definice 15). Operace s D-Indexem pracují výhradně s aproximacemi
množin regionů.
Proces hledání odpovědi je vidět v pseudokódu. Nejprve se postupně hledá
odpověď v rámci jednotlivých úrovní. Na každé z nich se testují oblasti,
které mají neprázdný průnik s dotazem. Algoritmus končí buď v případě,
že nebyl na některé úrovni proniklý vyloučený region (tj. celý dotaz ležel
uvnitř jediné separovatelné množiny), nebo po průchodu všemi úrovněmi a
prohledání bucketu vyloučených. K prohledávání bucketů je použita funkce
SearchInBucket(bucket, vektor polohy, dotazovaný objekt, poloměr ), řešící rozsahové dotazování nad logickým bucketem38 .
Složitost plyne z uvedeného popisu. Bohužel zde nelze obecně zaručit testování právě jednoho bucketu pro nalezení odpovědi. Tato situace nastává
pouze v ideálním případě, kdy celý dotaz leží uvnitř jediné separovatelné
množiny. Jinak řečeno, lepšího chování dosahují dotazy s menším poloměrem
dotazu39 . Druhá vlastnost řešení bodových dotazů, tj. že každá úroveň je testována maximálně jednou, je zachována ve všech případech. Počet výpočtů
metriky d je zdola omezen množstvím zjišťovaných položek vektorů vzdáleností. Dále je d měřena alespoň pro objekty, které jsou zařazeny do odpovědi.
Nelze očekávat 100% účinnost filtrování metrikou LP∞ . Pokud jsou však dobře
voleny pivoty, je navíc (objekty nenáležející do odpovědi) prohledáván pouze
zlomek fyzického bucketu.
Algoritmus 10: Rozsahový dotaz – DIndex
Vstup: Dotaz Q, poloměr rQ
Výstup: Odpověď A obsahující právě všechna Oi ∈ (Q, rQ )
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
38
Princip je stejný jako u bodových dotazů, jen pro poloměr rQ ≥ 0.
Mohlo by se zdát výhodné symetrické řešení zvětšením oblastí dělení. To ale poškozuje
kvalitu indexu a ve výsledku působí kontraproduktivně.
39
KAPITOLA 3. D-INDEX
77
/* Inicializace
*/
A = ∅;
/* Průchod úrovněmi D-Indexu
*/
foreach level in L do
/* Určí polohu ve vztažné soustavě úrovně a regiony v
okolí rQ
*/
(vQ , REGQ ) = Emplace(level, Q, rQ );
/* Průchod zasaženými regiony úrovně level
*/
foreach regQ in REGQ do
/* Hledání v bucketu
*/
A = A ∪ SearchRangeInBucket(Bucket(regQ ),vQ ,Q,rQ );
end
/* Konec, pokud není zasažen vyloučený region úrovně */
if ¬∃ regQ ∈ RQ : Excluded(regQ ) then
return A; // A obsahuje požadovanou odpověď
end
/* Určí polohu ve vztažné soustavě množiny vyloučených
vQ = Emplace(Q);
/* Hledání v množině vyloučených
A = A ∪ SearchRangeInBucket(X, vQ , Q, rQ );
*/
*/
return A; // A nyní obsahuje požadovanou odpověď
Příklad 16. (Rozsahový dotaz – D-Index) Obrázky 3.21 ilustrují řešení dotazu (Q, rQ ).
Na obrázku 3.21a je demonstrován test jedné úrovně. Nejprve je spočten
vektor vzdáleností vQ = (d(P1 , Q), d(P2 , Q), d(P3 , Q)) a aproximace množiny
regionů REGQ = ({0} , {1} , {0, −, 1}). Prohledány jsou buckety b((0, 1, 0)) =
2 a b((0, 1, 1)) = 3 testované úrovně. Pokračuje se další úrovní resp. prohledáním vyloučených, protože dotaz zasahuje do vyloučené oblasti bps1,ρ
3 .
Z testovaných bucketů jsou pomocí metrik LP∞ a d odfiltrovány záznamy
resp. objekty. Dotaz a odpověď je v nerozděleném prostoru ilustrována obrázkem 3.21b.
KAPITOLA 3. D-INDEX
(a) Prostor s dělením D-Indexem
78
(b) Prostor
Obrázek 3.21: Rozsahový dotaz – D-Index
3.4.5
Vyhledávání k nejbližších sousedů objektu
V D-Indexu použité řešení kNN dotazů se opírá o řadu definic a vlastností
prezentovaných v předchozích částech tohoto dokumentu. Algoritmus 11 hledající odpověď pracuje s aproximacemi množin regionů a je opět uveden v
zápisu pseudokódem. Odpovědi již nelze hledat zcela přímočaře jako odpovědi na rozsahové dotazy. Základní problém je neznalost poloměru oblasti
obsahující odpověď. V příkladu 8 bylo ukázáno, že je možné rozdělit prostor
prstenci a postupně zkoušet jimi proniknuté regiony. Jinými slovy řečeno,
takto se definuje uspořádání regionů podle vzdálenosti od dotazu. Rozdělení
je použito k určení pořadí testování množin bucketů. Prstence jsou určené
lokálně každou úrovní. Globální rozdělení použité samotným algoritmem 11
je tvořeno sloučením prstenců jednotlivých úrovní. Sjednocení (resp. lokální
výpočty) je možné provádět průběžně až při průchodu úrovněmi, přičemž z
pohledu prstenců je zajímavá pouze rostoucí posloupnost poloměrů.
Proces hledání objektů nelze obecně řešit jedním průchodem hierarchií
D-Indexu. V iteracích jsou postupně testovány prstence globálně dělící prostor40 . Udržována je vzdálenost dotazu a k-tého objektu rkN N . Inicializována je hodnotou ∞ (resp. d+ ). Později je vždy aktualizována na vzdálenost
min(rkN N , d(Q, Ok )), kde Ok je k-tý nejbližší objekt nalezený v prohledaných
bucketech. K prohledávání bucketů je použita funkce SearchInBucket(bucket, vektor polohy, dotazovaný objekt, vzdálenot k-tého objektu, počet nej40
V pořadí dělících poloměrů, viz pozorování 7.
KAPITOLA 3. D-INDEX
79
bližších k), řešící kNN dotazování nad logickým bucketem41 . Nová iterace průchodu úrovněmi není zahájena, pokud již je nalezeno alespoň k objektů bližších než vnitřní poloměr prstence, nebo už byly prohledány všechny buckety.
Pouze doběhne právě probíhající průchod úrovněmi (resp. prohledání vyloučených) a algoritmus končí.
Při popisu algoritmu 11 je možné rozdělit průběh na dvě základní fáze
(ilustrovány obrázkem 3.22, zobrazujícím zároveň fáze z příkladu 17):
1. Fáze expanze – Dokud není nalezeno k objektů ostře blíž než vnější
poloměr prstence, roste poloměr oblasti s odpovědí.
2. Fáze kontrakce – Jakmile je nalezeno k objektů ostře blíž než vnější
poloměr prstence, prohledají se jen zbylé regiony průniku (i přes víc
úrovní) a poloměr oblasti s odpovědí pouze klesá (nebo zůstává).
(a) Expanze
(b) Kontrakce
Obrázek 3.22: kNN dotaz – DIndex (fáze algoritmu)
Řešení jedné iterace průchodu úrovněmi je analogické rozsahovému dotazu. Pouze s rozdílem, že prostor je pronikán prstencem. Testovaná množina
regionů úrovně je zjištěna (funkcí HitRegions) na základě polohy dotazu
ve vztažné soustavě a hraničních poloměrů prstence. Spolu s víceprůchodovostí vyvstává potřeba zabránit opakovanému testování regionů resp. bucketů
a nutnost rozdělit chování v první a následujících iteracích. Je například
zřejmé, že není nezbytné opakovaně počítat polohu dotazu ve vztažné soustavě úrovně. Při první „návštěvě“ úrovně je spočítán vektor vzdáleností a
41
Princip je stejný jako u rozsahových dotazů, jen je rozšířen o omezení nalezených
objektů na rozsah k nejbližších. Tím umožňuje úpravu mezí již v průběhu prohledávání
bucketu a zpřesňuje tak filtrování.
KAPITOLA 3. D-INDEX
80
množina prstencem proniklých regionů, v dalších iteracích již pouze množina
prstencem proniklých regionů.
Kvůli víceprůchodovosti hierarchií a aproximativnímu kódování množin
regionů (vedoucím k nadbytečným resp. opakovaným požadavkům na prohledávání regionů), je pro každou úroveň uchovávána poslední aproximace
průniku, která je použita k odstranění některých opakování. K porovnání
dvou aproximací (funkcí Processed) není nutné omezovat se pouze na test
rovnosti. Jednoduchým vylepšením, nezvyšujícím příliš složitost testu, je porovnání aproximací po složkách pravidly shrnutými v tabulce 3.4 (zobrazuje
vztah složek „původní“ a „nové“ aproximace). Nejsou však odstraněny veškeré nadbytečné testy, protože jak bylo demonstrováno v příkladu 9, redundance je daná již samotným použitím aproximace. Lze však zabránit některým opakováním testů vyvolaných prstenci vzniklými sjednocením poloměrů
přes úrovně. Smysl to má zejména z toho důvodu, že aproximace kódují obvykle větší množství regionů a pro každý z nich je nutné zjistit bucket (resp.
číslo) a testovat, zda již nebyl prohledán.
XXX
XXX
Původní
{0}
{1}
{−}
{0, −}
{−, 1}
{0, −, 1}
Nový
XXX
XXX
{0} {1}
=
6
=
6
=
⊃
6=
⊃
6=
=
6
=
6
=
⊃
⊃
{−}
{0, −}
{−, 1}
{0, −, 1}
← {−}
← {−}
=
⊃
⊃
⊃
∪ {−}
6=
6=
=
6=
⊃
6
=
∪ {−}
6=
6=
=
⊃
6=
6
=
6
=
6
=
6
=
=
Tabulka 3.4: Test složek aproximací
Test po složkách je postaven na několika faktech:
1. Pokud jsou si složky aproximací rovny (symbol „=“) nebo je složka
nové aproximace „zúžením“ původní (symbol „⊃“), nemusí se nezbytně
měnit. Je lepší zkusit, jestli stará aproximace nekódovala identickou
resp. větší množinu regionů (konkrétně nadmnožinu nové).
2. Pokud složka nové aproximace kóduje pouze vyloučený region (symbol
„← {−}“), nebo pouze „rozšiřuje“ původní aproximaci o vyloučený region (symbol „∪ {−}“), není okamžitě nutné měnit aproximaci. Změna
má smysl pouze pokud je množina regionů rozšířena o separovatelnou
množinu.
3. V případě, že pro porovnávané složky platí 1 nebo 2, musí se pokračovat
KAPITOLA 3. D-INDEX
81
v testování zbylých složek. Původní aproximace není nahrazena novou
pokud podmínky splňují všechny složky.
4. Pokud pro některé složky neplatí 1 ani 2 (symbol „6=“), je nahrazena
původní aproximace novou.
5. Pokud se liší dimenze aproximací, došlo ke změně.
V případě, že se aproximace nezměnění, není nutné pokračovat v testu
úrovně. Je však třeba rozlišit dvě situace:
• Pokud nová aproximace (která nenahradila původní) v některé složce
kóduje vyloučený region, musí se pokračovat testem další úrovně.42
• V případě, že nekóduje vyloučený region, iterace končí.
V případě, kdy dojde ke změně původní množiny regionů, je nutné zpracovat náležité buckety aktuálně testované úrovně. A ze stejného důvodu, který
inicioval test změny aproximace, je třeba vést historii prohledaných bucketů.
Díky možnosti efektivního číslování se však jedná o rychlý test, zajišťující,
že žádný bucket není prohledáván více než jednou.
Příklad 17. (kNN dotaz – D-Index) Obrázky 3.23 ilustrují řešení dotazu Q
a počtu k = 3 nejbližších.
(a) Prostor s dělením D-Indexem
Obrázek 3.23: kNN dotaz – DIndex
42
V poslední úrovni to signalizuje test vyloučených.
(b) Prostor
KAPITOLA 3. D-INDEX
82
Na obrázku 3.23a je demonstrován jednoúrovňový D-Index (pro jednoduchost) a fáze řešení dotazu 3-NN s centrem Q. Dělící poloměry jsou převzaty
z příkladu 10. Jednotlivé iterace vypadají následovně:
0. Inicializace viz algoritmus 11, ro = r3o− .
1. 0 = ri < rkN N = ∞ – iterace proběhne.
• V první iteraci je vypočten vektor vzdáleností a aproximace množiny regionů. vQ [1] = (d(P1 , Q), d(P2 , Q), d(P3 , Q)), REGnew
=
Q
({0} , {1} , {1}) a inicializována REGQ [1] = (). Aproximace obsahuje pouze jeden region (0, 1, 1) (ještě nebyl prohledáván a není
vyloučený).
• Aproximace se mění a bucket b((0, 1, 1)) = 3 je prohledán (rozsah
dotazu ∞ a omezení na vzdálenost třetího nejbližšího). Vytváření
odpovědi proběhne v pěti krocích, při nichž je udržována aktuální
vzdálenost k-tého objektu rk :
(a)
(b)
(c)
(d)
(e)
(f )
A = (P1 )
A = (O3 , P1 )
A = (O2 , O3 , P1 ), rk = d(Q, P1 ) viz obrázek 3.23a poloměr rk1
A = (O1 , O2 , O3 ), rk = d(Q, O3 ) viz obrázek 3.23a poloměr rk2
Objekt O4 odfiltrován pomocí LP∞
Bucket byl prohledán.
Průchod úrovněmi končí.
• Aktualizují se poloměry rkN N = d(Q, O3 ), ri = r3o− a ro = r3i− .
2. r3o− = ri < rkN N = d(Q, O3 ) – iterace proběhne.
• Aproximace množiny regionů REGnew = ({0} , {1} , {−, 1}) obsahuje pouze region (0, 1, 1) a vyloučený region (0, 1, −). Množina regionů byla doplněna pouze o vyloučený region, test složek popsaný
tabulkou 3.4 vypadá takto (=, =, ∪ {−}). Původní aproximace se
nemění, průchod úrovněmi končí.
• Je prohledán bucket vyloučených, neobsahuje ale žádný objekt.
• Aktualizují se poloměry ri = r3i− a ro = r2o− .
3. r3i− = ri < rkN N = d(Q, O3 ) – iterace proběhne.
• Aproximace množiny regionů REGnew = ({0} , {1} , {0, −, 1}) obsahuje regiony (0, 1, 0), (0, 1, 1) a vyloučený region (0, 1, −). Je
KAPITOLA 3. D-INDEX
83
nutné prohledat buckety, protože došlo ke změně v poslední složce
(původní {1}, nová {0, −, 1}). Test všech složek popsaný tabulkou
3.4 vypadá takto (=, =, 6=)
• Bucket b((0, 1, 0)) = 2 (rozsah dotazu rkN N a omezení na vzdálenost třetího nejbližšího) je prohledán. Vytváření odpovědi proběhne
ve dvou krocích:
(a) A = (O1 , O2 , Ok ), rk = d(Q, Ok ) viz obrázek 3.23a poloměr rk
(b) Objekt P3 odfiltrován pomocí LP∞
(c) Bucket byl prohledán.
• Bucket b((0, 1, 1)) = 3 již byl prohledán.
• Průchod úrovněmi končí.
• Bucket vyloučených již byl prohledán.
• Aktualizují se poloměry rkN N = d(Q, Ok ), ri = r2o− a ro = r1i− .
4. r2o− = ri > rkN N = d(Q, Ok ) – algoritmus končí.
Vyhledávání proběhlo ve 3 iteracích, z nichž jedna byla ukončena díky testu
změny aproximací. Prohledávány byly 3 buckety, jeden z nich byl prázdný
a jeden měl být prohledáván dvakrát (díky vedení historie testovaných byl
prohledán pouze jednou). Celkem 5 objektů muselo být načteno a byla pro
ně měřena vzdálenost d(Q, x). 2 objekty byly odfiltrovány logickými buckety.
Iterace 1 a 2 jsou fázemi expanze (viz obrázek 3.22a) a iterace 3 je fází
kontrakce (viz obrázek 3.22b).
Algoritmus 11: kNN dotaz – DIndex
Vstup: Dotaz Q, počet k
Výstup: Odpověď A obsahující právě všechna Oi ∈ (Q, rkN N )
Data:
• Úrovně D-Indexu L
• Množina vyloučených X
ExcludedRegion =true;
A = ∅;
rkN N = ∞;
ri = 0;
ro = NextRadius(0);
KAPITOLA 3. D-INDEX
84
while rkN N ≥ ri and not AllAccessed() do
foreach l in L do
if první návštěva úrovně l then
(vQ [l], REGnew
Q ) = Emplace(l,Q,ro ); REGQ [l]=();
else
REGnew
Q =HitRegions(l,vQ [l],ri ,ro );
: Excluded(regQ );
ExcludedRegion = ∃ regQ ∈ REGnew
Q
new
if Processed(REGQ [l],REGQ ) then
if ExcludedRegion then
continue; // Další úroveň
break; // Další iterace
else
REGQ [l] = REGnew
Q ; // Změna aprox. množ. regionů
foreach regQ in REGQ [l] do
B = Bucket(regQ );
if Accessed(B) then
continue; // Další bucket
Insert(A,SearchRangeInBucket(B,vQ [l],Q,rkN N ,k));
end
end
if ExcludedRegion and not Accessed(X) then
vQ = Emplace(Q);
Insert(A,SearchRangeInBucket(X,vQ ,Q,rkN N ,k));
end
if |A| ≥ k then
rkN N =d(Q, poslední v A);
ri = ro ; ro =NextRadius(ro );
end
return A; // A nyní obsahuje požadovanou odpověď
Celková složitost je do značné míry závislá nejen na dotazu, ale i na
odpovědi. Záleží zde, v jak velkém rozsahu se nalézají požadované odpovědi.
Lze sice zaručit, že bude každý bucket prohledáván pouze jednou, ale jen na
úkor dodatečných testů a pomocných struktur. Díky použitým technikám je
celkové chování podobné rozsahovému dotazování.
Kapitola 4
Implementace
Tato kapitola je věnována implementaci použitých metod. Nejprve je popsán
framework pro řešení stromových struktur, v rámci kterého je realizován
PM-Strom použitý jako referenční struktura. V další části je popsána implementace D-Indexu.
4.1
ATOM – Amphora Tree Object Model
TLeafItem
TNode, TLeafNode
cQueryResult
cTreeCache
#mQueryResult
#mCache
1
1
1
1
TItem, TLeafItem, TNode, TLeafNode
1
1
cPersistentTree
#mPool
#mTreePool
1
TItem, TLeafItem, TNode, TLeafNode
1
#mHeader
1
cPool
1
-mPool
1
cTreePool
1
1
cTreeHeader
-mTreePool
1
Obrázek 4.1: Struktura ATOMu
ATOM[1] je objektový framework vyvinutý skupinou Amphora Research
Group1 na Katedře informatiky, FEI, VŠB – Technické univerzity Ostrava.
1
Domovská stránka skupiny http://arg.vsb.cz/argnew/.
85
KAPITOLA 4. IMPLEMENTACE
86
Původně byl zamýšlen pro implementaci UB-Stromu, ale později byl zobecněn. Nyní umožňuje realizovat „libovolnou“ persistentní stromovou strukturu
a obsahuje i aparát pro testování a měření vlastností.
Pro implementaci byl zvolen jazyk C++ a to nejen z důvodu existence
jeho normy, ale zejména pro jeho široké možnosti použití při psaní kódu na
různých úrovních abstrakce. Dalším v ATOMu silně využívaným prostředkem C++ jsou šablony, které umožňují generovat instanciace strukturovaných typů pro specifické typy hodnot. To je s výhodou použitelné právě pro
stromové struktury.
Základní charakteristiky ATOMu lze shrnout takto:
• Caching – Optimalizace práce s externím úložištěm.
• Pooling – Optimalizace práce s vnitřní pamětí.
• Optimalizace – Snaha o zevrubnou optimalizaci kódu.
R
R
• Částečná závislost na Windows
– Použití Windows
API při některých operacích.
Obrázek 4.1 ukazuje obecnou organizaci a stručný design frameworku
se základní třídou persistentního stromu, která slouží jako generický předek
všech implementací stromových struktur.
cPersistentTree – Jedná se o šablonu parametrizovanou typy vnitřních
uzlů TNode a listových uzlů TLeafNode (resp. položkami které obsahují
TItem a TLeafItem). Implementuje generické jádro všech stromových
struktur, spravuje cache a alokaci paměti. Sdružuje společný aparát
používaný stromovými strukturami, které jsou realizované pomoci této
třídy.
cTreeHeader – Jedná se o hlavičku stromu popisující omezení jeho rozměrů
a kapacit uzlů. Na základě těchto hodnot jsou inicializovány příslušné
cache (vyrovnávací paměti) a pooly (předem alokované dávky instancí).
Konkrétní stromová struktura má svou „hlavičku“ odvozenou děděním
z této třídy, nebo jejího potomka.
cTreeCache – Vyrovnávací paměť uzlů stromu. Řeší samostatně načítání a
ukládání vnitřních resp. listových uzlů, čímž umožňuje spravovat odděleně i jejich cache (řešené dvourozměrnými poli, do kterých se hašují
uzly). Typicky je disproporce mezi velikostí vnitřních a listových uzlů.
cTreePool – Pool objektů typu TNode, TLeafNode, TItem a TLeafItem omezující časté alokace a dealokace instancí těchto typů na haldě, čímž se
zrychlují operace se stromem.
KAPITOLA 4. IMPLEMENTACE
87
cPool – Obecný Pool, od které jsou odvozeny pooly uživatelských typů.
Důvod existence je analogický jako u cTreePool, jen se zde nejedná
nutně o práci s elementy přímo tvořícími strom.
cQueryResult – Kontejner odpovědi dotazu.
Podrobný popis frameworku ATOM a jeho designu je možné nalézt v
ATOM Book[1].
4.1.1
(P)M-Strom
TItem, TLeafItem, TNode, TLeafNode
{TItem=cPMTreeRoutingItem,
TLeafItem=cPMTreeGroundItem,
TNode=cPMTreeInnerNode,
TLeafNode=cPMTreeLeafNode}
cPersistentTree
1
1
#mHeader
1
1
cPMTree
cPMTreeHeader
1
*
1
cPMTreeInnerNode 1
#mPool
cMTreePool
1
cPMTreeLeafNode
cPMTreeRoutingItem
-mPivots
cDataObject
1
mPool
1
1
*
*
1
1
1
1
*
1
cPMTreeGroundItem
*
1
Obrázek 4.2: Struktura PM-Stromu v ATOMu
Jako implementace struktury PM-Strom[20] je použito řešení realizované
ve frameworku ATOM. Obrázek 4.2 ukazuje stručný design a vztah mezi
třídou PM-Stromu a šablonou základní třídy cPersistentTree. Implementace PM-Strom navíc využívá i část implementace, kterou má společnou s
realizací M-Stromu (vzájemný vztah je zachycen na obrázcích 4.4 a 4.3).
S principem struktury PM-Strom se lze seznámit v části kapitoly 2.2.3 a s
principem M-Stromu v části kapitoly 2.2.2.
cPMTree – Instance PM-Stromu implementuje algoritmy vyhledávání a
vkládání objektů. Vzniká děděním z šablony cPersistentTree následujícím specifikováním parametrů:
KAPITOLA 4. IMPLEMENTACE
88
• TNode – cPMTreeInnerNode je třída vnitřního uzlu PM-Stromu
obsahující instance cPMTreeRoutingItem jako své položky.
• TLeafNode – cPMTreeLeafNode je třída listového uzlu PM-Stromu
obsahující instance cPMTreeGroundItem jako své položky.
• TItem – cPMTreeRoutingItem je třída reprezentující jednu položku vnitřního uzlu PM-Stromu.
• TLeafItem – cPMTreeGroundItem je třída reprezentující jednu položku listového uzlu PM-Stromu.
TItem
cMTreeGroundItem
cMTreeGeneralNode
{TItem=cPMTreeRoutingItem}
cPMTreeGroundItem
cMTreeRoutingItem
{TItem=cPMTreeGroundItem}
cPMTreeLeafNode
cPMTreeInnerNode
cPMTreeRoutingItem
Obrázek 4.3: Vztah PM-Strom a M-Strom v ATOMu – uzly
Uzly PM-Stromu jsou rozšíření uzlů M-Stromu o použití pivotů. V zásadě pro uzly obou stromů platí totéž a jejich vzájemný vztah shrnuje
obrázek 4.3.
cDataObject – Reprezentace indexovaného „datového“ objektu. Instance
jsou uloženy v uzlech jako součást struktury v položkách uzlů stromu.
Ve vnitřních uzlech jsou použity i ke směrování. Vybrané instance jsou
navíc drženy globálně pro celý strom a dále jsou použity jako pivoty k
definici prstenců (pro vnitřní uzly) resp. polí vzdáleností (pro listy).
cMTreeHeader – Hlavička M-Stromu obsahuje nastavení použitých algoritmů vyhledávání a data pro práci M-Stromu.
cPMTreeHeader – Hlavička PM-Stromu rozšiřuje hlavičku M-Stromu přidáním informace o počtu pivotů (vnitřních resp. listových úrovní). Další
položky hlavičky M-Stromu jsou použité i pro PM-Strom. Vztah hlaviček obou stromových struktur shrnuje obrázek 4.4
KAPITOLA 4. IMPLEMENTACE
89
-mPool
cTreeHeader
1
cPool
1
cMTreeHeader
cMTreePool
mPool
1
1
cPMTreeHeader
1
mPool
1
Obrázek 4.4: Vztah PM-Strom a M-Strom v ATOMu – hlavička
cMTreePool – PM-Strom používá stejný typ poolu jako M-Strom. Jedná
se o pouhou instanci třídy cPool bez dalších uživatelských rozšíření.
PM-Strom je navržen jako zobecnění M-Stromu. M-Strom je možné vytvořit jako instanci PM-Stromu s nulovým počtem vnitřních i listových pivotů.
4.2
D-Index
cObject
cDIndexLevel
*
*
1
cDIndex
-Level
1
cDIndexPivot
1
*
1
1
-Pivot
*
1
1
-Buckets
-Bucket
cBufBucket
cBuckets
1
-ExclusionBucket
Obrázek 4.5: Struktura D-Indexu
K realizaci D-Indexu byly zvoleny prostředky umožňující srovnání s existující implementací PM-Stromu. ATOM nebyl použit přímo, byly z něj použity jen některé metody. Z ATOMu bylo použito jen naprosté minimum,
dovolující vytvoření srovnatelných podmínek pro obě struktury.
KAPITOLA 4. IMPLEMENTACE
90
R
R
Jako vývojové prostředí bylo zvoleno Microsoft
Visual Studio
2008 a
programovací jazyk C++. Kromě využití standardních knihoven je použita i
volně dostupná multiplatformní C++ knihovna boost2 . Tato knihovna vysoce
využívá šablony a některé části z ní jsou již nyní zařazeny do technické zprávy
komise připravující nadcházející standard C++.
Základní rysy implementace D-Indexu lze shrnout následujícími body:
• Optimalizace – Ladění kódu, práce s pamětí i práce s externím úložištěm.
• Objektovost – Na rozdíl od implementace ATOMu byla snaha držet
se více objektového řešení, místo jednoúčelových a nízkoúrovňových
řešení problémů. Mimoto však bylo vynaloženo nemalé úsilí i na efektivní implementaci klíčových částí, která vedla k vyzkoušení různých
variant řešení. Bylo nutné přikročit i k některým kompromisům (např.
u implementace třídy reprezentující vzdálenost objektů).
• Rozšiřitelnost – Důraz byl při návrhu kladen na snadnou implementaci
nových technik a algoritmů pracujících s parametry D-Indexu.
• Flexibilita – Kromě snahy o rozšiřitelnost bylo základním faktorem při
návrhu umožnit snadnou úpravu (resp. náhradu) dílčích částí implementace struktur3 .
• Kompatibilita s ATOMem – Kvůli umožnění srovnání s PM-Stromem
implementovaným v ATOMu, bylo nutné zvolit některé ústupky4 ovlivňující celkovou koncepci a omezující optimalizaci některých částí.
Obrázek 4.5 ukazuje základní strukturu a design řešení. Podrobný popis
chování, principů a vlastností D-Indexu (včetně zvolené realizace) je možné
nalézt v samostatné kapitole 3. Podrobné zdokumentování projektu (včetně
implementace) přesahuje rozsahem možnosti textu práce a je umístěno na
přiloženém médiu.
cDIndex – Realizace D-Indexu. Obsahuje jako součást bucket vyloučených
(resp. jednu instanci cBufBucket) a úrovně D-Indexu ve formě pole instancí cDIndexLevel. Implementuje algoritmy vyhledávání a vkládání
2
Adresa domovské stránky komunity vyvíjející knihovnu boost je http://www.boost.
org/. K dispozici jsou dokumentace i zdrojové kódy.
3
Například realizovat kontejner bucketů pomocí mapy a vytvářet reprezentace bucketů
až při přístupu. Současné řešení pomocí předem alokovaného vektoru bylo po úvaze zvoleno
z výkonnostních důvodů a navíc příliš neomezuje konfigurace struktury D-Indexu.
4
Například při implementaci tříd realizujících metriky, nebo objektové obalení reprezentací datových objektů v prostředí ATOMu.
KAPITOLA 4. IMPLEMENTACE
91
objektů. Dílčí operace algoritmů jsou řešeny lokálně (např. vkládání na
úroveň je metoda třídy cDIndexLevel ).
cObject – Reprezentuje datový objekt. Snaha o omezení vazeb na ATOM,
spolu s umožněním zařazení do hierarchie dědičnosti, vynutila řešit instance datových objektů cDataObject dodatečným obalením objektem
cObject.
cDIndexPivot – Reprezentuje jednu bps1,ρ
i , tj. kulovou ρ-rozdělující funkci
prvního řádu. Implementuje metody výpočtů jedné souřadnice posloupnosti specifikující region resp. aproximace množiny regionů.
cDIndexLevel – Reprezentace jedné úrovně. Obsahuje jako součást bpsn,ρ ,
tj. kulovou ρ-rozdělující funkci řádu n (resp. n instancí cDIndexPivot),
a obsahuje instanci kontejneru bucketů úrovně. Implementuje svými
metodami části algoritmů D-Indexu pracující lokálně v rámci jedné
úrovně.
cBuckets – Kontejner bucketů (resp. instancí cBufBucket).
cBufBucket – Realizuje jeden bucket resp. jeho logickou i fyzickou část.
Implementuje pro logickou část i indexaci jeho fyzické části. Pro efektivní práci s externím úložištěm pracuje bucket přes vyrovnávací paměť,
čímž značně redukuje pracovní časy.
Kapitola 5
Experimenty a měření
Tato část je věnována reálným výsledkům, naměřeným vlastnostem implementované struktury D-Index a srovnání s referenčními metodami. Použité
srovnávací metody jsou M-Strom, PM-Strom a aproximace metody LAESA.
Jak bylo řečeno, M-Strom je speciální případ PM-Stromu s nulovým počtem
pivotů. Navíc lze chování metody LAESA aproximovat pomocí PM-Stromu
s nulovým počtem vnitřních a nenulovým počtem listových pivotů.
5.1
Datové sady
Jako zdroj indexovaných objektů byly zvoleny 3 reálné datové sady (každá
se specifickým rozložením vzdáleností, viz obrázky 5.1).
CoPhIR – Sada 1 miliónu celočíselných vektorů dimenze 76, skládajících
se z dvojice MPEG-71 deskriptorů obrázků. První z dvojice je Color
Layout 2 , 12 dimenzionální vektor prostorové distribuce barev. Druhý
je Color-Structure 3 , 64 dimenzionální vektor kódující histogram barev
doplněný o prostorové informace.
Pro měření vzdálenosti mezi vektory je zvolena L2 metrika (viz část
kapitoly 2.3.1).
MUS – Sada 31136 řetězců, s délkami omezenými na 500 znaků, postavená
na sekvencích ncRNA4 myši domácí (mus musculus)5 .
1
http://www.chiariglione.org/mpeg/standards/mpeg-7/mpeg-7.htm
http://www.chiariglione.org/mpeg/standards/mpeg-7/mpeg-7.htm#E12E24
3
http://www.chiariglione.org/mpeg/standards/mpeg-7/mpeg-7.htm#E12E25
4
http://en.wikipedia.org/wiki/Non-coding_RNA
5
http://biobases.ibch.poznan.pl/ncRNA/ – kompletní zdroj ve FASTA formátu
(http://en.wikipedia.org/wiki/Fasta_format).
2
92
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
93
Pro měření vzdálenosti mezi řetězci je zvolena Levenshteinova metrika
(viz část kapitoly 2.3.2).
Polygony – Sada 250000 celočíselných vektorů dimenze 30, skládajících se
15 dvojic kódujících souřadnice bodů ve dvourozměrném prostoru.
Pro měření vzdálenosti mezi vektory je zvolena Hausdorffova L2 metrika (viz část kapitoly 2.3.1).
(a) CoPhIR
(b) MUS
(c) Polygony
Obrázek 5.1: Distribuce vzdáleností objektů datových sad
5.2
Metodika
Cílem bylo prověřit chování realizované implementace D-Indexu, ale zároveň
neduplikovat výsledky zjištěné v pracích [6, 7]. Na rozdíl od zmíněných prací
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
94
je zde stavěna struktura zcela automatizovaně, pouze na základě vstupních
dat a parametrů (viz část kapitoly 3.3). Provedená měření jsou doprovázena
i grafy zachycujícími naměřené hodnoty.
TM
R
Měření byla prováděna na osobním počítači s procesorem Intel
Core 2
Duo E6420 (4 MB L2 cache, 2.13 GHz, 1066 MHz FSB), pamětí 4 GB
TM
(4x 1 GB DDR2 PC5300) a pevným diskem Seagate Barracuda 7200.10
(320GB SATA II). Tyto parametry jsou zajímavé pouze vzhledem k reálným
časům.
Nejprve jsou na vektorové datové sadě CoPhIR prezentovány vlastnosti
automatizované výstavby struktury D-Indexu. CoPhIR je obsáhlá sada a
dobře demonstruje základní rysy implementovaných algoritmů. Dotazování
a srovnání charakteristik D-Indexu s ostatními metodami (při práci s výše
uvedenými sadami dat) je řešeno dále. Během testů byly velikosti vyrovnávacích pamětí voleny tak, aby struktura D-Indexu neměla vyšší nároky na
paměť než referenční struktury.
5.3
Vliv parametrů na výstavbu
Nejprve byl zkoumán vliv poloměru ρ a počtu pivotů, definujících bpsn,ρ , na
výslednou výšku D-Indexu.
(a) Počet úrovní
(b) Počet vyloučených objektů
Obrázek 5.2: Vliv poloměru ρ (funkcí bpsn,ρ )
Jak lze předpokládat, počet úrovní rychle roste s poloměrem ρ. Zajímavější je ale vliv počtu pivotů, který rychlost růstu ještě umocňuje. Na důvod
je možné nahlížet tak, že s počtem pivotů roste „objem“ oblasti vyloučené
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
95
úrovní6 . Analogicky se projevuje chování na počtu celkově vyloučených objektů, který se rychle blíží ke zvolené mezní hodnotě. V testech je nastavena
mez velikosti množiny vyloučených na 1% velikosti datové sady (pro CoPhIR 10000 objektů). Tato hodnota se ukázala jako vhodná volba. Výsledky
lze nahlédnout na obrázcích 5.2.
První problém leží ve volbě ρ, protože pro příliš velké (resp. příliš malé)
hodnoty celá struktura degeneruje. Spolu s tím je však spojena potřeba zvolit
množství pivotů pro metody s pevným počtem (viz část kapitoly 2.4). V
případě této datové sady byl pro další testy zvolen fixní poloměr ρ = 15
počet pivotů 6.
Dále byla řešena otázka vztahu metody výběru pivotů a výšky struktury.
Konkrétně závislost na nastaveném počtu hledaných pivotů, který je parametrem metod s konstantním počtem. Jak je ale demonstrováno obrázkem
5.3a, výsledky jednotlivých metod se příliš neliší.
Součástí zkoumání chování metod s konstantním (resp. proměnným) počtem pivotů je i závislost na mezi velikosti množiny vyloučených. Ukazuje
se, že metody s konstantním počtem pivotů jsou v tomto ohledu „citlivější“
a výška výsledné struktury klesá s rostoucí mezí. Naopak u metod s proměnným počtem je závislost zhruba konstantní. Výsledky lze nahlédnout na
obrázku 5.3b.
(a) Vliv počtu pivotů
(b) Vliv množiny vyloučených
Obrázek 5.3: Vliv metody volby pivotů na výšku indexu
Kromě výšky vybudované struktury indexu je vhodné prověřit i obsazení
jednotlivých úrovní. Jak je zobrazeno na obrázcích 5.4, obsazení klesá exponenciálně s pořadím úrovně. Efekt lze však zmírnit snižováním počtu pivotů
6
Sjednocení vyloučených prstenců šířky 2 · ρ.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
96
s rostoucí úrovní.
(a) Pevné počty pivotů úrovní (osa y log.
škála)
(b) Klesající počty pivotů úrovní
Obrázek 5.4: Obsazení úrovní
Mimo samotné sledování počtu objektů zařazených na danou úroveň lze
na využití úrovní nahlížet i prostřednictvím počtu vytvořených fyzických
bucketů. Z obrázku 5.5a je patrné, že pro malý počet pivotů je vztah zhruba
konstantní, ale s rostoucím počtem pivotů se rychle rozkolísá. Chování lze v
tomto případě snadno upravit snižováním počtu pivotů s rostoucí úrovní, viz
obrázek 5.5b.
(a) Pevné počty pivotů úrovní
(b) Klesající počty pivotů úrovní
Obrázek 5.5: Počet fyzických bucketů
Důležitý je nejen počet vytvořených fyzických bucketů, ale i jejich vyu-
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
97
žití, konkrétně průměrné množství obsažených objektů ve fyzických bucketech. Závislost je demonstrována na obrázcích 5.6. Při pevném počtu pivotů
zaplnění rychle klesá a opět je možné ho srovnat snižováním počtu pivotů, i
když i pak se pro vyšší počty projevuje rostoucí úroveň znatelněji.
(a) Pevné počty pivotů úrovní (osa y log.
škála)
(b) Klesající počty pivotů úrovní
Obrázek 5.6: Průměrné zaplnění fyzických bucketů
Pro doplnění lze uvést ještě závislost mediánu množství obsažených objektů ve fyzických bucketech, viz obrázky 5.7. Zatímco s pevným počtem
pivotů klesá, tak při snižování počtu pivotů má s rostoucí úrovní vzestupnou
tendenci (i zde se ale projevuje větší počet pivotů rozkolísáním hodnot).
(a) Pevné počty pivotů úrovní (osa y log.
škála)
(b) Klesající počty pivotů úrovní
Obrázek 5.7: Medián zaplnění fyzických bucketů
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
98
Ukázalo se, že s rostoucí úrovní lze očekávat pokles zařazených objektů.
To lze řešit buď ponecháním aktuálních parametrů, nebo parametry měnit.
Pokud jde o metody s pevným počtem pivotů je na místě otázka, zda zachovat, nebo snižovat počet pivotů. Snižováním lze zajistit zaplňování fyzických
bucketů. Chování vůči ostatním charakteristikám se v zásadě projevuje podle
možného očekávání.
Tento „problém“ ovšem nevzniká u metod bez předem určeného počtu
pivotů. U nich je třeba uvážit vliv volby meze velikosti množiny vyloučených,
která je v podstatě jediným faktorem umožňujícím ovlivnit vstup pro výběr
pivotů (mimo vlastní parametry metod).
(a) Vzdálené pivoty – jednotlivé úrovně
(b) Levné pivoty – jednotlivé úrovně
(c) Celkový počet pivotů indexu
Obrázek 5.8: Metody s proměnným počtem pivotů
Jak se projevují jednotlivé parametry vlastních metod je demonstrováno
pro výběr vzdálených pivotů na obrázku 5.8a a pro výběr levných pivotů
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
99
na obrázku 5.8b. Vliv volby meze velikosti množiny vyloučených, na celkový
počet pivotů vybraných metodami při stavbě D-Indexu, je ukázán na obrázku
5.8c.
V další části jsou již uvedeny výsledky měření dotazování.
5.4
Dotazování
Zvolené datové sady (CoPhIR, Polygony a MUS) dovolují pozorovat, kromě
schopnosti indexovat různé typy dat, i vliv odlišných distribucí vzdáleností
(resp. rozmístění dat v metrickém prostoru). Datová sada MUS navíc dovoluje pozorovat problémy s časovou složitostí metrik. Naměřené hodnoty jsou
průměrovány přes celou sadu dotazovaných objektů. Na všech datových sadách byly měřeny bodové, rozsahové i kNN dotazy. Bodové dotazy jsou dále
chápány jako rozsahové dotazy s poloměrem nula. Přesněji řečeno, jsou zahrnuty mezi rozsahové dotazy. Rozsahové dotazy byly měřeny s poloměry z
intervalu h0, 50i a kNN dotazy pro 5 ≤ k ≤ 250. U datových sad CoPhIR
a Polygony byly zkoumány i vlastnosti selektivity pro k ze stejného rozsahu
jako u kNN dotazů. Výsledky jsou probrány dále. Podrobnější informace lze
najít v záznamech na přiloženém médiu, viz příloha B.
MUS
CoPhIR
Polygony
Levenshtein
LowCost (cena ∈ h200, 400i, vzdál. + 200)
Fixed (mez 320)
Linear (koef icient 0.005)
L2
LowCost (vzdálenost + 300)
Fixed (mez 10000)
Linear (koef icient 0.01)
Hausdorff L2
SSSP (max. vzdálenost 700, α = 0.3)
Fixed (mez 2500)
Linear (koef icient 0.01)
metrika dat
volba pivotů
max. vylouč.
volba ρi = k · ri
metrika dat
volba pivotů
max. vylouč.
volba ρi = k · ri
metrika dat
volba pivotů
max. vylouč.
volba ρi = k · ri
Tabulka 5.1: Parametry struktury D-Index
Použité parametry jsou pro D-Index uvedeny v tabulce 5.1. Pro referenční
metody, řešené jako různé konfigurace PM-Stromu, jsou v tabulkách 5.2 a 5.3.
V textu je dále použito následující označení s popsaným významem:
M-Tree – PM-Strom s nulovým počtem vnitřních a listových pivotů.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
100
PM-Tree – PM-Strom s nenulovým počtem vnitřních a listových pivotů.
PM-Tree(LAESA) – LAESA aproximovaná PM-Stromem s nulovým počtem vnitřních a nenulovým počtem listových pivotů.
Vkládání objektů
Výběr center při štěpení
Rozdělování objektů při štěpení
Kapacita uzlu
1
2
3
jednocestné1
minimum maxim dvojic poloměrů2
dělení nadrovinou3
25 záznamů
Průchod stromem při jednocestném vkládání je vždy jen jednou větví.
Pokud je možných cest více, volí se větev již při průchodů stromem, ne
až na úrovni listů (na rozdíl od vícecestného vkládání).
Každé dva objekty jsou vyzkoušeny jako nová centra a vybrána je ta
dvojice, pro kterou je větší z poloměrů nejmenší.
Objekty jsou přiřazovány k bližšímu z vybraných center.
Tabulka 5.2: Parametry PM-Stromu – společné pro všechny sady
MUS
CoPhIR
Polygony
M-Tree
PM-Tree
PM-Tree[LAESA]
M-Tree
PM-Tree
PM-Tree(LAESA)
M-Tree
PM-Tree
PM-Tree(LAESA)
Počet pivotů
vnitřních listových
0
0
8
2
0
10
0
0
32
8
0
40
0
0
32
8
0
40
Tabulka 5.3: Parametry PM-Stromu – specifické pro konkrétní sadu
MUS
Nejprve byla testována sada MUS s distribucí vzdáleností zachycenou na
obrázku 5.1b. První z testů byly rozsahové dotazy. Není překvapivé, že s rostoucím poloměrem stoupá i náročnost. V tomto konkrétním případě roste
dokonce velice strmě již od nízkých hodnot (z důvodu „špatné“ distribuce
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
101
vzdáleností). Vlastnosti vstupních dat jsou dány zdrojem konkrétních hodnot. Jak se mění tvar křivek pro různá data, bude vidět u ostatních datových
sad. Na naměřených reálných časech se zde projevuje do značné míry také
výpočetní složitost metriky, která zastiňuje složitost ostatních dílčích operací. Nejrychlejší růst je do poloměru 50, kde se tempo růstu ustálí. Celkový
pohled na výsledky měření rozsahových dotazů lze získat z obrázků 5.9 a
detail pro poloměry 0 až 20 na obrázcích 5.10.
(a) Časy
(b) Výpočty
Obrázek 5.9: Rozsahové dotazy nad sadou MUS
(a) Časy
(b) Výpočty
Obrázek 5.10: Rozsahové dotazy nad sadou MUS s poloměrem do 20
Jak je vidět na obrázcích 5.9 a 5.10, testované metody podávají pro tuto
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
102
sadu podobné výsledky. Za povšimnutí ovšem stojí skutečnost, že pro malé
poloměry je D-Index výrazně nejlepší.
Dalším testem byly kNN dotazy, pro které jsou naměřené hodnoty zachyceny na obrázcích 5.11. Dalo by se opět očekávat, že s rostoucím k výrazně
poroste i náročnost. Na výsledcích pro tento typ dotazů se ale významně
projevila výpočetní náročnost metriky a ještě významněji fakt, že rozsah
vzájemných vzdáleností větší části datových objektů sady MUS je poměrně
úzký7 . D-Index zde v počtu potřebných výpočtů překonal ostatní metody
a reálné časy nepodával horší. U dalších sad se to pro tento typ dotazů, z
pohledu výpočetní složitosti, ukázalo spíše jako atypické chování.
(a) Časy
(b) Výpočty
Obrázek 5.11: kNN dotazy nad sadou MUS
Selektivita
Průměrný poloměr
Medián poloměrů
5
10
20
50
100
250
237.92 240.76 243.78 246.98 249.32 252.2
242
244
246
248
250
253
Tabulka 5.4: Selektivita MUS (poloměry)
Z obrázků 5.11 je vidět, že reálné časy metod se s rostoucím k sbližují a
počet potřebných výpočtů u referenčních metod pozvolna roste, zatímco u
D-Indexu se téměř nemění. Selektivita pro datovou sadu MUS není řešena,
opět z důvodu distribuce dat. Charakteristika selektivity pro sadu MUS je
shrnuta v tabulce 5.4.
7
Projevuje se to například tak, že mohutnost odpovědi na kNN dotaz (se sémantikou
uvedenou v definici 4) se s rostoucím k mění spíš po skocích než postupně.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
103
CoPhIR
Další testovanou sadou byla CoPhIR. Distribuce vzdáleností je zachycena
na obrázku 5.1a. Výpočetní náročnost metriky je v tomto případě výrazně
menší než u sady MUS. I rozložení dat v prostoru je „lepší“ 8 .
(a) Časy
(b) Výpočty
Obrázek 5.12: Rozsahové dotazy nad sadou CoPhIR
(a) Časy
(b) Výpočty
Obrázek 5.13: Rozsahové dotazy nad sadou CoPhIR s poloměrem do 50
Pro rozsahové dotazy je snadno pochopitelné, že náročnost roste s poloměrem. Pro lepší distribuce, než v případě sady MUS, ale není nástup tak strmý.
8
Není již tolik objektů navzájem přibližně stejně daleko.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
104
Náročnost sice roste poměrně rychle, ale plynule (místo prudkého vzestupu).
Tempo růstu náročnosti se zde zvyšuje zhruba kolem hodnoty 50. Výsledky
pro všechny testované poloměry rozsahových dotazů jsou zachyceny na obrázcích 5.12. Detail pro poloměry 0 až 50 je zobrazen na obrázcích 5.13. Z
obrázků je navíc patrné, že D-Index se pro velké poloměry chová z výpočetního hlediska hůř než referenční metody. Zjištěné rozdíly však nejsou příliš
významné. Naopak v reálných časech se D-Index ukázal nejrychlejší. Pro malé
poloměry dokonce překonává ostatní testované metody v obou aspektech.
(a) Časy
(b) Výpočty
Obrázek 5.14: kNN dotazy nad sadou CoPhIR
(a) Časy
(b) Výpočty
Obrázek 5.15: Selektivita rozsahových dotazů nad sadou CoPhIR
Při testech kNN dotazů jsou naměřené hodnoty zachyceny na obrázcích
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
105
5.14. Je vidět, že zde si D-Index vede ve srovnání množství potřebných výpočtů hůř. Z pohledu reálných časů ale výrazně překonává ostatní metody.
Ve výsledcích získaných během testování selektivity se sice ukazuje částečné srovnání rozdílů naměřených reálných časů, jak ale ukazují obrázky
5.15, chování je podobné kNN dotazu. Důvod takových výsledků D-Indexu je
patrný z distribuce vzdáleností sady. Většina hodnot je větší než 200 a, jak
bylo vidět výše, lepšího chování se dosahuje v případě menších poloměrů.
Polygony
Jako poslední byla testována sada Polygony s distribucí vzdáleností zachycenou na obrázku 5.1c. Výpočetní náročnost metriky je podobná jako v případě
sady CoPhIR. Distribuce vzdáleností je tu ale ještě „širší“.
Náročnost výpočtu rozsahových dotazů také roste podobným tempem. S
tím rozdílem, že výsledky naměřené pro jednotlivé metody téměř splývají. To
platí zejména pro výpočetní složitost. U reálných časů se pro větší poloměry
výsledky rozcházejí.
(a) Časy
(b) Výpočty
Obrázek 5.16: Rozsahové dotazy nad sadou Polygony
Na obrázcích 5.16 jsou zachycena měření přes všechny zkoušené poloměry.
Jak se ukázalo, výsledky všech metod jsou v celkovém měřítku téměř identické. Detail pro hodnoty 0 až 20 je na obrázcích 5.17 a potvrzuje to, co
již bylo vidět výše. Totiž skutečnost, že pro malé poloměry dotazů vykazuje
D-Index v obou měřených charakteristikách nejlepší chování.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
(a) Časy
106
(b) Výpočty
Obrázek 5.17: Rozsahové dotazy nad sadou Polygony s poloměrem do 20
(a) Časy
(b) Výpočty
Obrázek 5.18: kNN dotazy nad sadou Polygony
V případě kNN dotazů došlo ke změně chování oproti tomu, které bylo
pozorovatelné u sady CoPhIR. Výsledky měření jsou zachyceny na obrázcích
5.18. Jak je patrné, všechny metody vykazují podobné závislosti na velikosti
k, celkově se ale D-Index ukazuje být horší.
Při testování selektivity se však výsledky D-Indexu výrazně zlepšily, zatímco u ostatních metod došlo pouze k malé korekci a zrychlení. Z obrázků
5.19 ukazujících výsledky měření lze vyčíst, že v tomto případě je D-Index
opravdu ve sledovaných aspektech výrazně lepší než ostatní metody.
KAPITOLA 5. EXPERIMENTY A MĚŘENÍ
(a) Časy
107
(b) Výpočty
Obrázek 5.19: Selektivita rozsahových dotazů nad sadou Polygony
Celkové výsledky
Na testovaných sadách dat byly měřeny bodové, rozsahové i kNN dotazy.
U sad CoPhIR a Polygony i selektivita, zachycující rozdíl efektivity kNN
a rozsahových dotazů. Jak bylo vidět, rozsahové dotazy jsou na zde zkoušených metodách řešitelné obecně efektivněji než kNN dotazy. Důvodem je
neznalost poloměru u kNN dotazů. To se potvrdilo i při testech selektivity,
kdy je známa hodnota poloměru pro dané k. Ve většině testů se v kritériu reálných časů D-Index ukázal jako lepší nebo srovnatelný. Naopak při
srovnání výpočetní složitosti se pro kNN dotazy u sad CoPhIR a Polygony
ukazoval jako slabší9 . Pro bodové a rozsahové dotazy s malým poloměrem byl
D-Index bezkonkurenčně nejlepší metodou ve všech ohledech.
9
U CoPhIR i pro selektivitu.
Kapitola 6
Závěr
Cílem této práce bylo implementovat datovou strukturu D-Index, popsat její
chování na různých typech dat a srovnat výsledky s jinými existujícími metodami. Dále bylo potřeba, jak se zejména v průběhu implementace ukázalo,
vyřešit řadu vzniklých problémů.
Záměrem bylo prezentovat D-Index pod jiným úhlem pohledu než je v
pracích [6, 7], což s sebou neslo odlišný přístup k implementaci. Hlavním
rozdílem mezi implementacemi je, že řešení vytvořené jako součást této práce
buduje celou strukturu indexu automatizovaně. Samozřejmě až na iniciální
nastavení parametrů zajišťujících generičnost metody.
Problematika volby parametrů a zkoumání jejich vlivu na výstavbu struktury je nedílnou součástí práce a je detailněji rozvedena v rámci části kapitoly
3.3 a části kapitoly 5.3.
Zvláštní pozornost byla věnována chování při dynamické výstavbě (tj.
pro postupně vkládaná data). V důsledku byl řešen problém, jak některé z
parametrů automaticky přizpůsobovat v průběhu vkládání. To si vyžádalo
implementovat strukturu způsobem, dovolujícím přidávat nové algoritmy a
testovat jejich vlastnosti. Při zkoumání chování D-Indexu byla vyzkoušena
řada algoritmů změn parametrů. Pro indexaci řetězcových dat byla dokonce
vytvořena nová metoda výběru pivotů využívající charakteristické vlastnosti
tohoto typu dat, detailněji uvedena v části kapitoly 2.4.6. Jak se však ukázalo
při experimentech, které jsou blíže popsány v kapitole 5, lze ji díky kritériu
vzdálenosti použít i pro neřetězcová data.
Do návrhu a realizace řešení D-Indexu se promítla nejen snaha o maximalizaci „teoretických“ rychlostí (vyjádřených počty I/O operací a výpočty
metrik), ale také zvyšování „reálných“ rychlostí optimalizací kódu, které si
vyžádalo nemalé úsilí. Ve výsledku se to pozitivně projevilo na naměřených
reálných časech operací D-Indexu.
Důležitou úlohou práce bylo provést měření implementované struktury
108
KAPITOLA 6. ZÁVĚR
109
D-Index. Pro srovnání byly zvoleny metody M-Strom, PM-Strom a aproximace LAESA pomocí PM-Stromu. Zjištěné výsledky jsou shrnuty a prezentovány v kapitole 5. Jak je z nich patrné, podává D-Index vynikající výsledky
zejména pro bodové a rozsahové dotazy s malým poloměrem.
Seznam obrázků
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
Prokletí dimenzionality . . . . . . . . . . . . . . . . .
Indexace v metrických prostorech . . . . . . . . . . .
Dotazování v metrických prostorech . . . . . . . . . .
Využití trojúhelníkové nerovnosti . . . . . . . . . . .
Dolní odhad vzdálenosti objektů . . . . . . . . . . . .
LAESA/AESA – filtrování podle jedné dimenze (resp.
M-Strom . . . . . . . . . . . . . . . . . . . . . . . . .
PM-Strom . . . . . . . . . . . . . . . . . . . . . . . .
Příklady Lp metrik . . . . . . . . . . . . . . . . . . .
Příklady Lp metrik a nemetrik . . . . . . . . . . . . .
Hausdorffova metrika dvou polygonů pro d ≡ L2 . . .
Editační vzdálenost . . . . . . . . . . . . . . . . . . .
Výpočet editační vzdálenosti . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
pivotu)
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
15
16
17
18
20
23
25
27
30
31
31
33
33
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
ρ–rozdělující funkce . . . . . . . . . . . . . . . . . .
Separovatelná množina a množina vyloučených . . .
REGn,ρ : bps1,ρ
i (c) = − . . . . . . . . . . . . . . . . .
1,ρ
n,ρ
REG : bpsi (c) = 0 a bps1,ρ
i (c) = 1 . . . . . . . . .
n,ρ
REG¬ . . . . . . . . . . . . . . . . . . . . . . . . .
Prstencový ρ–rozdělující region REGn,ρ
(R, ri , ro ) . .
n,ρ
ρ–rozdělující regiony REG (R, ri ) a REGn,ρ
¬ (R, ro )
Rozvolnění vztažné soustavy . . . . . . . . . . . . .
Dělící poloměry pivotu P1 . . . . . . . . . . . . . .
Projekce pivotů na osu . . . . . . . . . . . . . . . .
Uspořádání dělících poloměrů . . . . . . . . . . . .
Dělení prstenci pro pivoty P1 , P2 , P3 . . . . . . . . .
Rozdělení objektů v prostoru . . . . . . . . . . . .
Dělení prostoru . . . . . . . . . . . . . . . . . . . .
Rekurzivní dělení vyloučených oblastí . . . . . . . .
D-Index . . . . . . . . . . . . . . . . . . . . . . . .
Dotazování v logickém bucketu . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
45
46
46
48
49
49
52
53
54
54
54
55
56
57
57
58
110
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SEZNAM OBRÁZKŮ
111
3.18
3.19
3.20
3.21
3.22
3.23
Buckety . . . . . . . . . . . . . . . .
Hierarchie D-Indexu . . . . . . . . .
Možné „tvary“struktury D-Indexu . .
Rozsahový dotaz – D-Index . . . . .
kNN dotaz – DIndex (fáze algoritmu)
kNN dotaz – DIndex . . . . . . . . .
.
.
.
.
.
.
4.1
4.2
4.3
4.4
4.5
Struktura ATOMu . . . . . . . . . . .
Struktura PM-Stromu v ATOMu . . .
Vztah PM-Strom a M-Strom v ATOMu
Vztah PM-Strom a M-Strom v ATOMu
Struktura D-Indexu . . . . . . . . . . .
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
59
60
66
78
79
81
. . . . . .
. . . . . .
– uzly . .
– hlavička
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
87
88
89
89
Distribuce vzdáleností objektů datových sad . . . . . . . .
Vliv poloměru ρ (funkcí bpsn,ρ ) . . . . . . . . . . . . . . .
Vliv metody volby pivotů na výšku indexu . . . . . . . . .
Obsazení úrovní . . . . . . . . . . . . . . . . . . . . . . . .
Počet fyzických bucketů . . . . . . . . . . . . . . . . . . .
Průměrné zaplnění fyzických bucketů . . . . . . . . . . . .
Medián zaplnění fyzických bucketů . . . . . . . . . . . . .
Metody s proměnným počtem pivotů . . . . . . . . . . . .
Rozsahové dotazy nad sadou MUS . . . . . . . . . . . . .
Rozsahové dotazy nad sadou MUS s poloměrem do 20 . . .
kNN dotazy nad sadou MUS . . . . . . . . . . . . . . . . .
Rozsahové dotazy nad sadou CoPhIR . . . . . . . . . . . .
Rozsahové dotazy nad sadou CoPhIR s poloměrem do 50 .
kNN dotazy nad sadou CoPhIR . . . . . . . . . . . . . . .
Selektivita rozsahových dotazů nad sadou CoPhIR . . . . .
Rozsahové dotazy nad sadou Polygony . . . . . . . . . . .
Rozsahové dotazy nad sadou Polygony s poloměrem do 20
kNN dotazy nad sadou Polygony . . . . . . . . . . . . . .
Selektivita rozsahových dotazů nad sadou Polygony . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
93
94
95
96
96
97
97
98
101
101
102
103
103
104
104
105
106
106
107
Seznam tabulek
2.1
Editační operace a vztah k Dmin a Dmax . . . . . . . . . . . . 32
3.1
3.2
3.3
3.4
Množiny vybrané průniky oblastí . . . . . . . . . . .
Dělící poloměry . . . . . . . . . . . . . . . . . . . . .
Rozdělení objektů (není řešeno skutečné uspořádání)
Test složek aproximací . . . . . . . . . . . . . . . . .
5.1
5.2
5.3
5.4
Parametry
Parametry
Parametry
Selektivita
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
50
52
55
80
struktury D-Index . . . . . . . . . . . . . .
PM-Stromu – společné pro všechny sady . .
PM-Stromu – specifické pro konkrétní sadu
MUS (poloměry) . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
100
100
102
112
Seznam algoritmů
1
2
3
4
5
6
7
8
9
10
11
Rozsahový dotaz – AEASA . . . . . . . . . . . . . . . . . . . .
Dvoufázový algoritmus kNN dotazu – LAESA . . . . . . . . . .
Výběr levných pivotů – LowCostPivots . . . . . . . . . . . . . .
statická výstavba – DIndex . . . . . . . . . . . . . . . . . . . .
AddLevel(Y ⊆ S) – DIndex (přidání úrovně) . . . . . . . . . . .
InsertOnLevel(level ∈ L, O ∈ S) – DIndex (vložení na úroveň) .
InsertToExclusionSet(O ∈ S) – DIndex (vložení do vyloučených)
Vložení objektu – DIndex . . . . . . . . . . . . . . . . . . . . .
Bodový dotaz – DIndex . . . . . . . . . . . . . . . . . . . . . .
Rozsahový dotaz – DIndex . . . . . . . . . . . . . . . . . . . .
kNN dotaz – DIndex . . . . . . . . . . . . . . . . . . . . . . . .
113
22
23
38
68
69
70
72
74
75
76
83
Index
AESA, 21
LAESA, 24, 58, 92
Amphora Tree Object Model, viz ATOM
ATOM, 11, 85
D-Index, 9, 10, 17, 41, 55, 89, 92, 93
bodový dotaz, 60, 74, 99
externí hašování, 9, 59
implementace, 89, 92, 93
kNN dotaz, 45, 48, 60, 78, 99
rozsahový dotaz, 45, 60, 76, 99
vkládání objektu, 59
Dotazování
bodový dotaz, 7, 17, 74, 99
dotazování na přesnou shodu, 7
kNN dotaz, 8, 17, 45, 78, 99
přesné vyhledávání, 9
podobnost, viz Metrický prostor
podobnostní dotazování, 7, 16, 17
relevance, 7
rozsahový dotaz, 7, 17, 45, 76, 99
Editační vzdálenost, 34
Indexace dat, 8, 9
v metrických prostorech, 12, 16
M-Strom, 9, 17, 24, 87, 92
implementace, 87, 92
Metrické přístupové metody, 9
Metrický prostor, 8, 12
definice metriky, 12
Diskrétní metrika, 28
Eukleidovská L2 metrika, 30, 92
Hammingova metrika, 28, 34
Hausdorffova L2 metrika, 31, 93
Hausdorffova metrika, 29
Levenshteinova metrika, 34, 93
Manhattanská L1 metrika, 30
Maximová L∞ metrika, 30
metody globálních pivotů, 16, 21
metody lokálních pivotů, 16, 24
metody obojetné, 17, 26
metrika, 8, 9, 12, 28
Minkowského metrika, 29
Needlemanova-Wunchova vzdálenost, 34
pivot, 10, 16
podobnost, viz vzdálenost, 13
podobnostní funkce, 13
prokletí dimenzionality, 15
řídící objekt, viz pivot
Smithova-Watermanova vzdálenost, 34
trojúhelníková nerovnost, viz definice metriky, 14
Výběr pivotů, 35
vzdálenost, viz metrika, 14
PM-Strom, 9, 26, 87, 92
implementace, 87, 92
Výběr pivotů
H-F algoritmus, 36, 94
Inkrementální algoritmus, 36, 94
Náhodný výběr, 36, 62, 94
Náhodný výběr množin, 36, 94
Výběr levných pivotů, 37, 66, 94,
98
114
INDEX
Výběr vzdálených pivotů, 37, 62,
66, 94, 98
115
Literatura
[1] Amphora Research Group. Amphora Tree Object Model (ATOM) Book,
2003.
[2] Bustos, Navarro, and Chavez. Pivot selection techniques for proximity
searching in metric spaces. PRL: Pattern Recognition Letters, 24, 2003.
[3] Sam Chapman. Sam’s string metrics. Website - Natural Language Processing Group, Department of Computer Science, Sheffield University,
2007. http://www.dcs.shef.ac.uk/~sam/simmetrics.html.
[4] Edgar Chávez and Gonzalo Navarro. A Probabilistic Spell for the Curse
of Dimensionality. In ALENEX’01, LNCS 2153, pages 147–160. Springer, 2001.
[5] Paolo Ciaccia, Marco Patella, and Pavel Zezula. M-tree: An efficient
access method for similarity search in metric spaces. pages 426–435,
1997.
[6] Vlastislav Dohnal. Indexing Structures for Searching in Metric Spaces.
PhD thesis, Masaryk University, Faculty of Informatics, 2004.
[7] Vlastislav Dohnal, Claudio Gennaro, Pasquale Savino, and Pavel Zezula.
D-index: Distance searching index for metric data sets. Multimedia Tools
Appl., 21(1):9–33, 2003.
[8] R. Filho, A. Traina, Jr. Traina, C., and C. Faloutsos. Similarity search
without tears: The OMNI-family of all-purpose access methods. In 17th
International Conference on Data Engineering (ICDE’ 01), pages 623–
632, Washington - Brussels - Tokyo, April 2001. IEEE.
[9] Dan Gusfield. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology. Cambridge University Press,
January 1997.
116
LITERATURA
117
[10] A Juan, E Vidal, and P Aibar. Fast k-nearest-neighbours searching
through extended versions of the approximating and eliminating search
algorithm (aesa). In ICPR ’98: Proceedings of the 14th International
Conference on Pattern Recognition-Volume 1, page 828, Washington,
DC, USA, 1998. IEEE Computer Society.
[11] D. Knuth. The Art of Computer Programming, Vol. I: Fundamental
Algorithms. Addison-Wesley, Reading, MA, 1973.
[12] D. Knuth. The Art of Computer Programming, Vol. II: Seminumerical
Algorithms. Addison-Wesley, Reading, MA, 1973.
[13] D. Knuth. The Art of Computer Programming, Vol. III: Sorting and
Searching. Addison-Wesley, Reading, MA, 1973.
[14] Vladan Majerech. Úvod do složitosti a NP-úplnosti. el. učební text,
1997.
[15] Luisa Micó and Jose Oncina. A new criterion for approximating in
a recent version with linear preprocessing of the aesa algorithm. In
Selected papers from the 5th Spanish Symposium on Pattern recognition
and images analysis : advances in pattern recognition and applications,
pages 3–11, River Edge, NJ, USA, 1994. World Scientific Publishing Co.,
Inc.
[16] María Luisa Micó, José Oncina, and Enrique Vidal. A new version of
the nearest-neighbour approximating and eliminating search algorithm
(aesa) with linear preprocessing time and memory requirements. Pattern
Recogn. Lett., 15(1):9–17, 1994.
[17] S. B. Needleman and C. D. Wunsch. A general method applicable to
the search for similarities in the amino acid sequence of two proteins. J.
Mol. Biol., pages 443–453, 1970.
[18] Oscar Pedreira and Nieves R. Brisaboa. Spatial selection of sparse pivots
for similarity search in metric spaces. In Jan van Leeuwen, Giuseppe F.
Italiano, Wiebe van der Hoek, Christoph Meinel, Harald Sack, and Frantisek Plasil, editors, SOFSEM (1), volume 4362 of Lecture Notes in Computer Science, pages 434–445. Springer, 2007.
[19] Jaroslav Pokorný. Základy implementace souborů a databází. Skripta
MFF UK, 1997.
LITERATURA
118
[20] Tomas Skopal, Jaroslav Pokorny, and Vaclav Snasel. Pm-tree: Pivoting
metric tree for similarity search in multimedia databases. ADBIS (Local
Proceedings).
[21] Tomáš Skopal. Metric Indexing in Information Retrieval. PhD thesis,
Technical University of Ostrava, Faculty of Electrical Engineering and
Computer Science Department of Computer Science, 2004.
[22] Tomáš Skopal. Vyhledávání v multimediálních databázích. Přednáška –
MFF UK, 2006.
[23] T. F. Smith and M. S. Waterman. Identification of common molecular
sequences. J. Mol. Biol., 147:195–197, 1981.
[24] M.L. Micó-Andrés; J. Oncina; E. Vidal. An algorithm for finding nearest
neighbours in constant average time with a linear space complexity. In
11th International Conference on Pattern Recognition, 1992. Den Haag
(HOLANDA (PAISES BAJOS)), 01/09/1992.
[25] Pavel Zezula, Giuseppe Amato, Vlastislav Dohnal, and Michal Batko.
Similarity Search: The Metric Space Approach (Advances in Database
Systems). Springer, November 2005.
Dodatek A
Aplikace
V rámci řešení této práce byly vytvořeny následující aplikace
dindex – Projekt implementující datovou strukturu D-Index včetně prostředí pro testování.
dropdim_avs – Utilita pro úpravu souboru datové sady typu AVS snižováním
dimenze objektů.
fasta2avs – Utilita na převod souboru z FASTA formátu do formátu AVS.
pm_tree – Aplikace využívající existující implementaci datové struktury
PM-Stromu a poskytující prostředky pro její testování.
selvec_avs – Utilita pro výběr podmnožiny objektů ze souboru datové sady
typu AVS.
119
Dodatek B
Struktura přiloženého média
Nedílnou součástí této práce je přiložené médium DVD obsahující části práce,
které nebylo možné umístit přímo do textu, elektronickou verzi textu v PDF,
zdrojové kódy atd.
Základní struktura je následující
boost_1_35_0 – Kompletní zdroje knihovny boost v1.35.0, včetně dokumentace.
dataset – Použité datové sady ve formátu AVS (ATOM Vector Set), viz
příloha B.1.
log – Soubory se záznamy z měření.
queryset – Sady dotazů ve formátu AVS (ATOM Vector Set) viz příloha
B.3.
src – Zdrojové kódy, viz příloha B.4.
text – Přiložené texty, viz příloha B.2.
B.1
Datové sady
cophir1m76.avs – Datová sada „CoPhIR“.
mus.fasta.avs – Datová sada „MUS“.
mus.fasta.x500.avs – Datová sada „MUS“ s délkou řetězců omezenou na
500.
polygonSet.avs – Datová sada „Polygony“.
120
DODATEK B. STRUKTURA PŘILOŽENÉHO MÉDIA
B.2
121
Přiložené texty
master.pdf – Text této práce v elektronické podobě ve formátu PDF.
man.pdf – Návod k programu dindex formou manuálové stránky ve formátu PDF. Ostatní programy jsou pouze pomocné. O jejich použití lze
získat dostatečnou představu z tohoto návodu a obvyklým vypsáním
nápovědy k jejich použití.
dox – Kořenový adresář dokumentace vytvořených aplikací.
D-Index – Dokumentace projektu dindex.
utils – Dokumentace utilit dropdim_avs, fasta2avs a selvec_avs.
PM-Tree – Dokumentace projektu pm_tree.
graph – Zdroje použitých grafů.
images – Použité obrázky.
B.3
Sady dotazů
V názvech souborů jsou dále použity tyto zkratky s následujícím významem
• <počet> – Počet vybraných objektů datové sady. Může odpovídat hodnotě
1. Absolutní – např. 700, ale může to být i zkratka jako 1k odpovídající 1000.
2. Relativní – např. 1pct znamená 1%.
• <k> – Hodnota k pro dotaz na k nejbližších.
cophir – Sady dotazů nad datovou sadou „CoPhIR“.
cophir1m76.<počet>.sel.avs – Vybraný počet objektů datové sady.
cophir1m76.<počet>.sel.ids – Seznam ID vybraného počtu objektů datové sady.
cophir1m76.<počet>.sel.<k>.rng – Soubory obsahující seznam
dvojic ID objektu datové sady a vzdálenost jeho k nejbližšího.
mus.x500 – Sady dotazů nad datovou sadou „MUS“ s délkou řetězců omezenou na 500.
DODATEK B. STRUKTURA PŘILOŽENÉHO MÉDIA
122
mus.x500.<počet>.sel.avs – Vybraný počet objektů datové sady.
mus.x500.<počet>.sel.ids – Seznam ID vybraného počtu objektů
datové sady.
mus.x500.<počet>.sel.<k>.rng – Soubory obsahující seznam dvojic ID objektu datové sady a vzdálenost jeho k nejbližšího.
polygony – Sady dotazů nad datovou sadou „polygony“.
polygonSet.<počet>.sel.avs – Vybraný počet objektů datové sady.
polygon.<počet>.sel.ids – Seznam ID vybraného počtu objektů
datové sady.
polygon.<počet>.sel.<k>.rng – Soubory obsahující seznam dvojic ID objektu datové sady a vzdálenost jeho k nejbližšího.
B.4
Strom zdrojových kódů
dindex – Kořenový adresář zdrojových kódů.
atom – Zdrojové kódy ATOMu, včetně implementace datové struktury
PM-Strom.
boost/boost – Zdrojové kódy knihovny boost verze 1.35
boost/lib – Předkompilovaná část knihovny boost verze 1.35, potřebná pro „slinkování“ s částmi projektu využívajícími framework
program_options knihovny boost pro zpracování parametrů programu.
dindex – Zdrojové kódy projektu D-Index.
dropdim_avs – Zdrojové kódy utility dropdim_avs.
fasta2avs – Zdrojové kódy utility fasta2avs.
pm_tree – Zdrojové kódy aplikace na testování PM-Strom
selvec_avs – Zdrojové kódy utility selvec_avs.

Podobné dokumenty

Laboratorní přístroje a technologie pro mikrobiologické laboratoře

Laboratorní přístroje a technologie pro mikrobiologické laboratoře včetně rotoru a 2 sad bucketů pro centrifugaci 1,4 až 15 ml zkumavek, pro výzkum i klinické aplikace, unikátní řešení rotoru 2 in 1 - Dual Spin umožňuje centrifugaci jak v úhlových bucketech tak i ...

Více

Archiv webinářů

Archiv webinářů MQL II - Základy automatických obchodních strategií 13.5.2015 Srovnání Forex a Futures 29.4.2015 Záznam Investiční show 3 - Příběh milionáře Využijte své obchodování na maximum! 15.4.2015 Obchodová...

Více

Květen 2015

Květen 2015 sebe jsem to věděla, že to tak bude. Ale vím, že jsem do toho dala v tu chvíli všechno, co jsem mohla, a i když mě to mrzí, jsem ráda za takovou zkušenost. Vůči klukům jsem ale žádné negativní poci...

Více

zde - SEMACH

zde - SEMACH uložit uložit jako

Více

Kreslení schémat a návrh desek plošných spojů

Kreslení schémat a návrh desek plošných spojů používání programu, a to ani v případě, že byl na jeho možné problémy výslovně upozorněn. Vlastníkem programu zůstává i nadále Cadsoft, který Vám, koncovému uživateli programu přenechal pouze právo...

Více

Výroční zpráva FEL 2007 - Fakulta elektrotechnická

Výroční zpráva FEL 2007 - Fakulta elektrotechnická svého druhu v západočeském a jihočeském regionu a za dobu své existence vychovala již přes sedm tisíc inženýrů, tisícdvěstě bakalářů a přes třistapadesát absolventů doktorských typů studia, kteří j...

Více

1. test z PJC Jméno studenta: Pocet bodu

1. test z PJC Jméno studenta: Pocet bodu který zajisti, aby nevadilo jeho opakované vkládání. ---------------------------------------------------------------------Varianta 57: příklad 9 (10 bodů) Napište program, který převádí stupně Fahr...

Více

Vidlice Rock Shox

Vidlice Rock Shox Nastavovací knoflík se nachází na spodku pravé nohy vidlice. Otáčením knoflíku ve směru „zajíce“ na samolepce se rychlost vracení vidlice do plného zdvihu zvyšuje. Otáčení ve směru „želvy“ se rychl...

Více

Slovo k sezoně - BK KARA Trutnov

Slovo k sezoně - BK KARA Trutnov jsme na přípravu světové akce měli jen necelé dva měsíce. Zároveň bych chtěl ocenit přístup k reprezentaci hráček, které absolvovaly Je to daň za úspěšnost česdva vrcholy krátce za sebou, kého náro...

Více