Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Relaterede dokumenter
Algoritmisk geometri

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Prioritetskøer og hobe. Philip Bille

Datastrukturer (recap)

Danmarks Tekniske Universitet

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Datastrukturer (recap)

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Geometrisk skæring. Afgørelse af om der findes skæringer blandt geometriske objekter Bestemmelse af alle skæringspunkter

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Danmarks Tekniske Universitet

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Datastrukturer (recap) Datastruktur = data + operationer herpå

Sortering. Eksempel: De n tal i sorteret orden

Sortering ved fletning (merge-sort)

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Sortering af information er en fundamental og central opgave.

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er

Divide-and-Conquer algoritmer

Skriftlig eksamen i Datalogi

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Netværksalgoritmer 1

Danmarks Tekniske Universitet

Om binære søgetræer i Java

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Binære søgetræer og skiplister

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

Vejledende løsninger

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Dynamisk programmering

Sortering i lineær tid

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Mm6: More sorting algorithms: Heap sort and quick sort - October 29, 2008

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Søgning og Sortering. Philip Bille

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Algoritmer og invarianter

DM02 Kogt ned. Kokken. Januar 2006

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Udtømmende søgning 1

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

DM507 Algoritmer og datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Dynamisk programmering

Udtømmende søgning. Udtømmende søgning (kombinatorisk søgning) Problem med 4461 byer Udtømmende søgning i grafer. Find den korteste rundtur

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Transkript:

Algoritmisk geometri Intervalsøgning 1 2 Motivation for intervaltræer Intervalsøgning Lad der være givet en database over ansatte i en virksomhed Ansat Alder Løn Ansættelsesdato post i databasen Vi kan opfatte en ansat som et punkt i et 3-dimensionalt rum Alder: [15, 67] Løn: [0, 500000] Ansættelsesdato: [1/1 1900, 1/1 2100] Ansættelsesdato Antag, at vi ønsker at finde alle ansatte med en løn i intervallet [20000, 50000] Vi kan undersøge samtlige poster og udtage dem, hvor lønnen ligger i dette interval Men hvis databasen er stor, er denne fremgangsmåde for langsom Det samme gør sig gældende, hvis vi ønsker at finde alle ansatte, for hvilke Løn! [20000, 50000] ^ Alder! [25, 40] Løn Alder 3 4

Ortogonal intervalsøgning 1-dimensional intervalsøgning Alder 45 35 25 Forespørgsel (Løn 20000-50000, Alder 25-40) Data: Punkter P = {p 1, p 2,.., p n } i 1 dimension (mængde af reelle tal) Forespørgsel: Find alle punkter i et 1-dimensionalt interval, [x 1 ] Datastruktur 1: Sorteret array 15 0 50 100 150 200 Løn i 1000 kr Vi kan opnå hurtigere søgning end lineært gennemløb ved hjælp af passende datastrukturer Algoritme: 1. Søg efter x 1 og x 2 ved binær søgning. Køretid O(log n) 2. Udskriv alle punkter imellem dem. Køretid O(s) Samlet køretid O(log n + s) Vi vil tilstræbe O(log n + s) køretid, hvor s er antallet af fundne elementer 5 6 1-dimensional intervalsøgning (fortsat) Datastruktur 2: Balanceret binært søgetræ (f.eks. et rød-sort-træ) De interne knuder indeholder nøglerne og bruges til at styre søgningen Algoritme: Benyt rekursion startende i roden Når en intern knude v mødes gøres følgende: (1) hvis key(v) < x 1, så søg rekursivt i v s højre barn (2) hvis x 1! key(v)! x 2, så søg rekursivt i begge v s børn (3) hvis key(v) > x 2, så søg rekursivt i v s venstre barn key(v) Algoritme ti-dimensional intervalsøgning Algorithm 1DTreeRangeSearch(x 1, v) Input Search keys x 1 and x 2, and a node v of a binary search tree T Output The elements stored in the subtree of T rooted at v, whose keys are greater than or equal to x 1 and less than or equal to x 2 if T.isExternal(v) return Ø if x 1! key(v)! x 2 L 1DTreeRangeSearch(x 1, T.leftChild(v)) R 1DTreeRangeSearch(x 1, T.rightChild(v)) return L # {element(v)} # R else if key(v) < x 1 return 1DTreeRangeSearch(x 1, T.rightChild(v)) else if x 2 < key(v) return 1DTreeRangeSearch(x 1, T.leftChild(v)) 7 8

1-dimensional intervalsøgning (Eksempel: søgning for x 1 = 30 og x 2 = 80) Analyse 68 Balanceret binært søgetræ: Pladsforbrug: O(n) Tid for konstruktion: O(n log n) 37 99 18 12 23 55 42 61 81 74 90 Tid for forespørgsel: Vi besøger s knuder inden for intervallet Vi besøger højst 2h knuder, som ikke er i intervallet (de stiplede knuder på forrige figur), hvor h er træets højde Da træet er balanceret, h er O(log n), er køretiden for søgning O(log n + s) 21 49 9 10 2-dimensional intervalsøgning 2-dimensional intervalsøgning Lad T x være et 1-dimensionalt intervaltræ baseret på punkternes x-koordinater Knyt til hver interne knude v i T x et 1-dimensionalt træ T y (v), der indeholder knuderne i undertræet for v og er ordnet efter disses y-koordinat T x T y (v) Søg i T x efter punkter i intervallet [x 1 ] Undervejs opsamles de knuder, der tilhører [x 1 ] x [y 1 ] v x 1 x 2 Når algoritmen møder en knude, v, hvor alle knuder i dens undertræ tilhører [x 1 ], søges i det tilknyttede hjælpetræ, T y (v) Efterkommere til v i T x undersøges ikke y 2 y 1 11 12

Algoritme ti-dimensional intervalsøgning Algorithm 2DTreeRangeSearch(x 1, v, t) Input Search keys x 1, and y 2 ; node v in the primary structure T of a two-dimensional range tree; type t of node v Output The items in the subtree rooted at v, whose coordinates are in the x-range [x 1,x 2 ] and in the y-range [y 1,y 2 ] if T.isExternal(v) return Ø if x 1! x(v)! x 2 if y 1! y(v)! y 2 M {element(v)} else M Ø { to be continued on next page } if t = left L 2DRangeSearch(x 1, T.leftChild(v), left ) R 1DRangeSearch(y 1, T.rightChild(v)) else if t = right L 1DRangeSearch(y 1, T.leftChild(v)) R 2DRangeSearch(x 1, T.rightChild(v), right ) else if t = middle L 2DRangeSearch(x 1, T.leftChild(v), left ) R 2DRangeSearch(x 1, T.rightChild(v), right ) else { x(v) < x 1 x(v) > x 2 } M Ø if x(v) < x 1 L Ø R 2DRangeSearch(x 1, T.rightChild(v), t) else { x(v) > x 2 } L 2DRangeSearch(x 1, T.leftChild(v), t) R Ø return L # M # R 13 14 Analyse (plads) Analyse (tid) Et 2D-intervaltræ bruger O(n log n) plads Bevis: Et punkt, der lagres i T x, lagres også i enhver hjælpestruktur T y (u), hvor u er en forfader til v i T x Der er O(log n) forfædre for hver knude, og derfor O(log n) kopier af ethvert punkt Søgning i et 2D-intervaltræ bruger O(log 2 n + s) tid, hvor s er antallet af fundne punkter Bevis: Tidsforbruget for knuder på de to søgeveje er O(log n) For hver af de indvendige knuder, der er børn af knuder på de to søgeveje, besøges deres hjælpetræ Der er O(log n) af denne type knuder, og hver søgning i et hjælpetræ bruger O(log n) tid 15 16

Prioritetsøgetræer Prioritetsøgetræer Konstruktion Et priorioritetsøgetræ kan konstrueres i O(n log n) tid Et prioritetsøgetræ er et træ, der er et binært søgetræ med hensyn til punkternes x-koordinat og en max-hob med hensyn punkternes y-koordinat I et sådan træ indeholder roden (1) det punkt, der har den største y-koordinat samt (2) medianen for punkternes x-koordinater (bemærk, at denne værdi ikke behøver at være x-koordinaten for punktet) Det venstre og højre undertræ er begge prioritetstræer og repræsenterer punkter med x-koordinat mindre end, henholdsvis større end, medianen Bevis: Punkterne sorteres først i forhold til deres x-koordinat. Det kan gøres i O(n log n) tid Medianen for punkternes x-kordinater kan bestemmes i O(1) tid Punktet med størst y-koordinat kan bestemmes i O(n) tid Dermed er roden bestemt, og dennes venstre og højre undertræ kan bestemmes på samme måde (rekursivt, ud fra to punktmængder, der hver er cirka halvt så stor som den oprindelige punktmængde) Køretiden for konstruktion T(n) kan derfor udtrykkes ved rekursionsligningen T(n) = 2T(n/2) + bn, T(1) = b Ved brug af mestersætningen får vi, at T(n) er O(n log n) 17 18 Prioritetsøgetræer Søgning Prioritetintervaltræ Et prioritetsøgetræ kan benyttes til at finde alle punkter i et område af formen [x 1 ] x [y 1,%) Søgningen foretages som en norma-dimensional intervalsøgning efter [x 1 ], men et undertræ for en knude v undersøges kun, hvis y(v) " y 1 Søgningen bruger O(log n + s) tid, hvor s er antallet af fundne punkter Hvad gør vi, hvis ønsker at søge i et område af formen [x 1 ] x [y 1 ]? Benyt et prioritetintervaltræ, d.v.s. et binært søgetræ for y-koordinaterne, hvor der til alle interne knuder, undtagen roden, er knyttet et prioritettræ Et venstre barn har et prioritetsøgetræ, der ikke er opad begrænset Et højre barn har et et prioritetsøgetræ, der ikke er nedad begrænset Forælderen tjener som den manglende grænse ved søgningen, så den 3-sidede søgning er tilstrækkelig Søgning bruger O(log n + s) tid, hvor s er antallet af fundne punkter 19 20

Quad-træer Søgning i quad-træer Et quad-træ kan bruges til at gemme punkter i planet, således at intervalsøgning bliver let Der benyttes et 4-vejs træ, der repræsenterer kvadranter, delkvadranter, o.s.v. Da træets dybde afhænger af punkternes nærhed, kan det være meget dybt. Sædvanligvis angives derfor en maksimal dybde, D, for træet l j f i b d k m a e c g h 1 2 3 1 2 3 4 1 2 1 2 4 d b a c e 1 2 2 4 3 4 2 4 k m l i j f g h Ved søgning efter punkter i et område R undersøges hvert delkvadrant, der overlapper R Når R omslutter et delkvadrant, opregner vi blot alle de eksterne knuder, der er efterkommere af knuden Når quad-træet har begrænset dybde, D, er køretiden for søgning O(Dn). Hele træet traverseres i værste tilfælde 21 22 Et k-d-træ er en generalisering af et 1D-områdetræ til højere dimensioner Et k-d-træ er et binært træ, hvor hver interne knuder repræsenterer en opsplitning af punkterne i en given dimension, og de eksterne knuder indeholder punkterne k-d-træer f j p e l n c g i b d o k m a h (punktbaseret) To typer af k-d-træer: Interval-baserede (opsplitning i forhold til den længste side i rektanglet) Punkt-baserede (opsplitning i forhold til fordeling af punkter i rektanglet) e g c p j f n l h a k m i b o d 0 23 24

0 0 25 26 0 0 27 28

0 0 29 30 l 9 l 9 l 8 0 l 8 0 0 l 8 l 8 31 32

Kompleksitet Konstruktion af et k-d-træ kan foretages i O(n log n) tid Medianbestemmelse kan ske med Quickselect i lineær tid Søgning kan i værste tilfælde være O(dn), men i praksis er søgning hurtig Et k-d-træ kan benyttes til at finde nærmeste nabo til et punkt: (1) Find ved søgning efter punktet et lille rektangel, der indeholder punktet (2) Benyt dette rektangel til en intervalsøgning. Formindsk om muligt rektanglet undervejs Køretiden er typisk O(log n) 33