k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami

Podobné dokumenty
Binární vyhledávací stromy pokročilé partie

Algoritmy výpočetní geometrie

Datové struktury pro prostorové vyhledávání

Rekurentní rovnice, strukturální indukce

Algoritmy a datové struktury

Základní datové struktury III: Stromy, haldy

IB111 Úvod do programování skrze Python

Voronoiův diagram. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta

Hledání k-tého nejmenšího prvku

Stromy, haldy, prioritní fronty

TGH07 - Chytré stromové datové struktury

Rekurentní rovnice, strukturální indukce

Jarníkův algoritmus. Obsah. Popis

Stromové struktury v relační databázi

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Složitosti základních operací B + stromu

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

TGH07 - Chytré stromové datové struktury

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

NPRG030 Programování I, 2018/19 1 / :03:07

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

a) b) c) Radek Mařík

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Semestrální práce 2 znakový strom

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:

Dynamické datové struktury IV.

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Pole a kolekce. v C#, Javě a C++

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Návrh Designu: Radek Mařík

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

SQL tříhodnotová logika

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Maturitní téma: Programovací jazyk JAVA

Kapitola 11: Indexování a hešování. Základní představa

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Stromy. Jan Hnilica Počítačové modelování 14

Dynamické datové struktury III.

IB111 Úvod do programování skrze Python

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY 10

Skip list dokumentace

1. Databázové systémy (MP leden 2010)

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

B-Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Stromové struktury v relační databázi

Datové struktury Úvod

Základy algoritmizace a programování

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Výpočetní geometrie Computational Geometry

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Algoritmy pro shlukování prostorových dat

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

Anotace. Jednotky (tvorba a využití), struktury (typ record),

Radek Mařík

Stromy. Jan Kybic.

Lineární klasifikátory

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Dynamické programování. Optimální binární vyhledávací strom

UNIVERZITA PARDUBICE DIPLOMOVÁ PRÁCE

Prioritní fronta, halda

COMPLEXITY

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Datové struktury. Zuzana Majdišová

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

vyhledávací stromové struktury

B Organizace databáze na fyzické úrovni u serveru Oracle

Rekurzivní algoritmy

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

BINARY SEARCH TREE

Dynamicky vázané metody. Pozdní vazba, virtuální metody

STACK

Urychlovací metody pro Ray-tracing

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

Základy řazení. Karel Richta a kol.

Algoritmy na ohodnoceném grafu

Úvod do mobilní robotiky AIL028

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

TGH05 - Problém za milion dolarů.

19. Druhý rozklad lineární transformace

1. Vektorové algoritmy jejich výstupem je soubor geometrických prvků, např.

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Základní informace o předmětu Otázka:

Výpočetní geometrie. Pavel Strachota. 9. listopadu FJFI ČVUT v Praze

Algoritmizace prostorových úloh

Transkript:

kd-stromy (kd-trees) k čemu to je: ukládání vícerozměrných dat (k-dimenzionální data) vstup: Množina bodů (nebo složitějších geometrických objektů) v k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami t.ž. každý objekt je obsažený ve svém vlastním kvádru. záměr: rozložit plochu (prostor,... ) na malý počet buňěk tak, aby žádná neobsahovala velký počet vstupních objektů. Snadný přístup k objektům na základě jejich pozice. Zdroje: H. Samet. Multidimensional spatial data structures. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 16:1 16:29. Chapman and Hall / CRC, 2005. H. Samet. Foundations of Multidimensional and Metric Data Structures. Morgan Kaufmann, 2006. Skiena S. S. The Algorithms Design Manual. Springer, New York, 1998. ISBN 0-387-94860-0. pozn.: přestože u jednotlivých instancí by měl být uváděn název podle rozměru (tj. 2d-stromy, 3d-stromy, atd.), používá se název kd-strom.

kd-stromy (kd-trees) vstup: Množina bodů (nebo složitějších geometrických objektů) v k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami t.ž. každý objekt je obsažený ve svém vlastním kvádru.

kd-stromy (kd-trees) Typický algoritmus konstrukce (statický kd-strom): konstrukce kd-stromu rozkladem množiny bodů. každý uzel ve stromě je určen rovinou skrze jeden ze svých rozměrů. = rozklad bodů na ty nalevo a napravo (resp. nad a pod) tak, aby jich bylo stejně. ty jsou pak děleny stejným způsobem (přes jiné rozměry) po log(n) krocích se rozklad zastaví, každý bod je v jedné vlastní buňce (v listu). Existují alternativní konstrukce kd-stromu, které vkládají body postupně a děĺı příslušné buňky, přestože takové stromy se snadno stanou velmi nevyváženými.

kd-stromy (kd-trees) Prostor: O(n) protože každý uzel = jeden bod, Výška: log(n) kvůli dělení

kd-stromy (kd-trees) Typický algoritmus konstrukce podrobněji: jak provádět dělení? setřídit + rozseknout O(n log 2 (n)) random O(n 2 ) (kvůli možnosti degenerace, nestává se často) lineární výběr mediánu O(n log(n)) lineární výběr mediánu: známá záležitost z QuickSortu Cormen T. H., Leiserson C. E., Rivest R. L., Stein C. Introduction to Algorithms. Second Edition. MIT Press, 2001. ISBN 0-262-53196-8.

Intermezzo: lineární výběr mediánu Algoritmus Select: (výběr i-tého nejmenšího prvku) 1 Rozděl n prvků vstupního pole na n/5 skupin o 5 prvcích (popř. s jednou se zbývajícími (n mod 5) prvky). 2 Najdi medián každé z n/5 skupin (setřídění insert-sortem + vybrání prostředního) 3 Použij rekurzivně algoritmus Select na nalezení mediánu x z n/5 mediánů nalezených v kroku 2. 4 Rozděl pole (Partition z QuickSortu) podle x. k = 1+počet prvků v dolním segmentu, takže x je k-tý nejmenší prvek a n k prvků je v horním segmentu. 5 Porovnej i a k: Pokud i = k, vrat x. Pokud i < k rekurzivně použij Select na nalezení i-tého nejmenšího prvku v dolním segmentu. Pokud i > k rekurzivně použij Select na nalezení (i k)-tého nejmenšího prvku v horním segmentu.

Intermezzo: lineární výběr mediánu Analýza algoritmu Select

Intermezzo: lineární výběr mediánu Počet prvků větších než x: ( 1 n 3 2) 3n 2 5 10 6 to znamená, že Select se rekurzivně zavolá nejvýše na 7n/10 + 6 prvků v kroku 5. Funkce T (n) reprezentující časovou složitost algoritmu Select: Kroky 1,2 a 4 zaberou O(n) času. Krok 3 zabere T ( n/5 ) času Krok 5 zabere T (7n/10 + 6) času Záhadný předpoklad: Na 140 a méně prvku stačí konstantní čas. T (n) { O(1) pokud n 140, T ( n/5 ) + T (7n/10 + 6) + O(n) pokud n > 140

Intermezzo: lineární výběr mediánu T (n) { O(1) pokud n 140, T ( n/5 ) + T (7n/10 + 6) + O(n) pokud n > 140 Ukážeme, že čas je lineární (substitucí): T (n) cn pro dostatečně velkou konstantu c a všechna n > 0. pro n 140 jasné; předpokladejme O(n) (nerekurzivní složka T (n)) je ohraničená a n: O(n) an pro všechna n > 0. Použitím substituce na pravé straně rekurence: T (n) c n/5 + c(7n/10 + 6) + an cn/5 + 7cn/10 + 6c + an = 9cn/10 + 7c + an = cn + ( cn/10 + 7c + an). což je nejvýše cn pokud cn/10 + 7c + an 0.

Intermezzo: lineární výběr mediánu (... pokračování z předchozího slajdu) což je nejvýše cn pokud cn/10 + 7c + an 0. Ta nerovnost je ekvivalentní s c 10a(n/(n 70)). Protože předpokládáme, že n 140, dostaváme (n/(n 70)) 2... A tedy: výběr a a c, t.ž. c 20a splňuje tu nerovnost. Pozn.: na záhadné konstantě 140 vlastně není nic záhadného, klidně bychom mohli zvolit cokoli většího než 70 a podle toho vybrat c. konec intermezza

kd-stromy (kd-trees) Point location: nalézt buňku, ve které se nalézá dotazovaný bod q (O(log(n))) Nearest neighbor search: Nalést bod ve stromu S, který je nejbĺıže k dotazovanému bodu q. provede se Point location a najde se buňka c obsahujicí q. q je ohraničená nějakým bodem p (to ale nemusí být nejbližší bod) zjistí se všechny buňky c ve vzdálenosti d(p, q). testne se jestli c neobsahují bližší bod Range search: nalézt všechny body, které se nalézají v daném čtverci / v dané oblasti. Partial key search: Hledání na základě necelého kĺıče. Např.: v 3d-stromu s dimenzemi věk, výška, váha, hledáme někoho s věkem 35 a výškou 174cm, ale neznáme váhu.

kd-stromy (kd-trees) Varianty kd-stromů: liší se v tom, jak je volen řez: cyklení přes dimenze: d 1, d 2,..., d k, d 1,... řezání největší dimenze: vybírá se tak, aby výsledné buňky byly, co nejbližší čtvercům / krychĺım /... Quadtrees a Octtrees: namísto jednoho řezu se použijí řezy přes všechny dimenze 4 potomci ve 2d, 8 potomků ve 3d. BSP-trees: (Binary space partitions) používají obecné řezy (nejen paralelní k osám), například oddělělení polygonů. R-trees:... to už je jiná struktura. Modifikování kd-stromu: Inkrementální vkládání Najde se vhodný list a rozřízne se Mazání Najde se mazaný uzel, odstraní se, jeho uzly z potomků se tam znovu naskládají (inkrementálním vkládáním) (tyto operace ale dělají strom nevyvážený)

k-d-b-stromy (vyvažovací varianta kd-stromů; kombinace kd-stromů a B-stromů) Dva druhy stránek: 1 Region pages obsahuje kolekci párů (region, page id) (max M) 2 Point pages obsahuje kolekci párů (bod, lokace); lokace je umístění záznamu v databázi (max M). Vlastnosti k-d-b-stromu každou stránku považujeme za uzel a každé page id v region page za ukazatel na ukazatel na uzel. Dále: žádná region page neobsahuje null ukazatel, a žádná region page není prázdná délka cesty z kořene k listu je stejná v každé region page, regiony tvoří rozklad pokud kořen je region page, sjednocení regionu je celá oblast (d 1 d 2 d k ) pokud máme (region, page id) a stránka na kterou se odkazuje page id je region page, pak sjednocení regionů v ní je region pokud máme (region, page id) a stránka na kterou se odkazuje page id je point page, všechny body v ní leží v regionu.

k-d-b-stromy Příklad: 2-D-B strom John T. Robinson: The K-D-B-tree: a search structure for large multidimensional dynamic indexes, International Conference on Management of Data archive Proceedings of the 1981 ACM SIGMOD international conference on Management of data, pp 10 18.

k-d-b-stromy Vyhledávání: v podstatě známe; Vkládání: v podstatě známe, jenom potřebujem split Split podle bodu x i : point page body se rozděĺı na ty napravo od x i a na ty nalevo vznikají dvě nové point page.

k-d-b-stromy Split podle bodu x i : region page Pro každý pár (region, page id) ve staré region page: 1 Pokud region leží nalevo od řezu, dá se do levé stránky, 2 Pokud region leží napravo od řezu, dá se do levé stránky, 3 Jine Splitni stránku, na kterou se odkazuje page id podle x i vznikají stránky s id: left id, right id Rozděl region podle x i na levý a pravý. Dej do levé stránky (levý, left id) a do pravé (levý, left id); pozn.: Split je tedy rekurzivní

k-d-b-stromy Split podle bodu x i : region page

k-d-b-stromy Vkládání záznamu (bod, lokace) Pokud je strom prázdný, vytvoř kořen s (bod, lokace), skonči. Pokus se vyhledat bod, pokud už tam je, skonči. Přidej (bod, lokace) do point page nalezené v předchozím bodu, pokud není přeplněná, skonči. Vyber rozměr a bod, podle kterého se provede split. Proved split. Pokud nešlo o kořen, uprav předka (protože potomek byl splitnutý), pokud to povede k přeplnění, pokračuj rekurzivně předchozím bodem. Pokud šlo o kořen, vytvoř nový kořen, skoči. Varianty algoritmu: různé druhy výběru rozměru, podle kterého se provádí split (čtvrtý bod)

k-d-b-stromy Vkládání záznamu (bod, lokace) Varianty algoritmu: různé druhy výběru rozměru, podle kterého se provádí split (čtvrtý bod)

k-d-b-stromy Mazání záznamu (bod, lokace) Základ: najdi záznam a smaž ho. Narozdíl od B-stromů, uzly k-d-b-stromu stačí, když jsou neprázdné; merge je potřeba provádět méně často. Merge je podobný jako u B-stromů, občas nastává problém s tím, že 2 regiony se nedají spojit tak, aby tvořily region: