text práce - SIRET Research Group
Transkript
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
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 ...
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á...
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...
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ý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...
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...
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...
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...