kap. 8.6 Computational Geometry Hovedkapittelet (kap. 8) dreier seg generelt om devide-and-conquer eller splitt og hersk :

Like dokumenter
To geometriske algoritmer, kap. 8.6

Computational Geometry

INF Triangulering. Med sterk støtte fra Petter Kristiansen. Skal først se på et eksempel fra Google Earth

Uke 12 inf2440 v2018. Eric Jul PSE-gruppa Ifi, UiO

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.2

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.)

Svarforslag til ukeoppgaver til INF 4130

INF2220: Time 12 - Sortering

INF2220: Forelesning 2

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF Algoritmer og datastrukturer

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Kompleksitetsteori reduksjoner

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

INF oktober Stein Krogdahl. Altså: Hva kan ikke gjøres raskt (med mindre P = NP)

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

Algoritmer for Delaunay-triangulering

INF-MAT5370. Trianguleringer i planet (Preliminaries)

Søking i strenger. Prefiks-søking Naiv algoritme Knuth-Morris-Pratt-algoritmen Suffiks-søking Boyer-Moore-algoritmen Hash-basert Karp-Rabin-algoritmen

INF 4130 / / Dagens foiler hovedsakelig laget av Petter Kristiansen Foreleser Stein Krogdahl Obliger:

Notater til INF2220 Eksamen

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Stoff som i boka står i kap 4, men som er. 10. Februar Ifi, UiO

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Turingmaskiner.

Definisjon av binært søketre

Trianguleringer i planet.

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Stoff som i boka står i kap 4, men som er

INF Algoritmer og datastrukturer

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

HamboHus 5.4 Rev. 1, 8. september 2005 A. Cordray

INF Algoritmer og datastrukturer

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Disjunkte mengder ADT

GIB2 - Stikkord. Alexander Nossum I-IKT desember Kartografi 2

Lineære ligningssystemer og gausseliminasjon

Divide-and-Conquer II

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

Lineære ligningssystemer og gausseliminasjon

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

Vi skal se på grafalgoritmer for:

MAT1030 Forelesning 23

MAT1030 Diskret Matematikk

INF5110 Kap. 5: Parsering nedenfra-og-opp (Bottom-up parsing) 21/ Stein Krogdahl Ifi, UiO. Angående Oblig 1:

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

UNIVERSITETET I OSLO

Uke 5 Disjunkte mengder

UNIVERSITETET I OSLO

Divide-and-Conquer. Lars Vidar Magnusson

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

1 Gauss-Jordan metode

Vi skal se på grafalgoritmer for:

UNIVERSITETET I OSLO

Matchinger i ikke-bipartite grafer

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

Rekursiv programmering

LO118D Forelesning 12 (DM)

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

LO118D Forelesning 2 (DM)

Dynamisk programmering Undervises av Stein Krogdahl

Grunnleggende Grafteori

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

INF Algoritmer og datastrukturer

Stein Krogdahl, Dino Karabeg, Petter Kristiansen. Kenneth A. Berman and Jerome L. Paul.

Dynamisk programmering

Løsnings forslag i java In115, Våren 1998

Karakterer. Kapittel Homomorfier av grupper. 8.2 Representasjoner

Dagens stoff er hentet fra kapittel 9 i læreboka, samt kapittel 20.5 (som vi «hoppet over» sist)

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

INF Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

Eksamen i tdt4120 Algoritmer og datastrukturer

LP. Leksjon 7. Kapittel 13: Nettverk strøm problemer

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Linjegeometri. Kristian Ranestad. 3. Januar 2006

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) INF / Stein Krogdahl Ifi, UiO

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

Fornavn. Etternavn. Innlæringsmål: forstå hvordan positive og negative magnetiske poler kan demonstrere tiltrekkende og frastøtende kraft.

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Korteste vei i en vektet graf uten negative kanter

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Oversikt over det kinesiske restteoremet

Modulo-regning. hvis a og b ikke er kongruente modulo m.

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

INF Algoritmer og datastrukturer

EKSAMEN. Informasjon om eksamen. Emnekode og -navn: ITD37018 Anvendt Robotteknikk. Dato og tid: , 3 timer. Faglærer: Haris Jasarevic

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

Grafalgoritmer: Korteste vei

Transkript:

INF 4130, 17. november 2011 kap. 8.6 Computational Geometry Stein Krogdahl Hovedkapittelet (kap. 8) dreier seg generelt om devide-and-conquer eller splitt og hersk : Splitt problemet opp i mindre problemer. Løs hvert av de mindre problemene (kanskje rekursivt ved ytterligere oppdelinger?) Finn løsningen på det store problemet ved å bruke løsningene vi fant på de mindre problemene - Vi skal se på det å finne den konvekse innhylling av en punktmengde, 8.6.2 - Også triangulering kan løses greit v.h.a. splitt og hersk 1

Geometriske algoritmer Computational Geometry Feltet dreier seg om algoritmer som løser problemer i det vanlige 2- eller 3-dimensjonale (eller n-dimensjonale) rom Vi skal her bare ha 2 dimensjoner. Bruksområder: Mønstergjenkjening Datagrafikk Grafiske informasjonssystemer GIS CAD/CAM (DAK/DAP) Robotikk VLSI-design Og ikke minst: Triangulering g Eksempler vi skal se på: Gitt en mengde punkter i planet: Finn convex hull = Konveks innhylling (se neste foil) Finn det par av punkter som har minst avstand 2

Convex hull Kunne oversettes til det konvekse hull Men det er ikke et sånt hull! av en punktmengde. 3

Det er et sånt hull = skrog Vi kaller det derfor her den konvekse k innhylling 4

Konveks innhylling La P være en mengde punkter i et k-dimensjonalt rom, P R k. (Vi skal for enkelthets skyld bare se på k = 2.) Definisjon En mengde Q R k er konveks dersom: for alle punkter q 1, q 2 Q linjesegmentet q 1 q 2 ligger i Q. Definisjon Den konvekse innhyllingen til en mengde punkter P R k er den minste konvekse mengde Q som inneholder punktene i P. 5

Utgangspunkt: En punktmengde i planet 6

Konveks innhylling av en punktmengden Bokas intuisjon: Punktene er spiker, og vi legger en strikk rundt 7

Svaret skal komme som punkter (x,y) i rekkefølge rundt polygonet, Startpunkt t og retning kan variere 8

Én måte å lage den konveks innhyllingen på: Kalles Jarvis March Idé: Snurr en hyssing stegvis rundt punktene Start f.eks. med punktet med minst x-verdi (er alltid på den konveksek innhyllingen!?). 9

Første skritt Sving tråden mot høyre, og stopp ved første berøring med et punkt Dette er neste punkt på innhyllingen 10

Videre: Snurr så videre, alltid rundt siste punkt man fant, til man berører et nytt punkt. Må i hvert steg finne det punktet som det er minst svingvinkel til. Tar tid O(n) med rett fram algoritme 11

Neste steg: 12

Og neste: 13

Og neste: 14

Og neste: 15

Avslutning: Når man finner startpunktet som neste punkt 16

Og altså: Den konvekse innhylling: Og Jarvis march har marsjert ferdig Har i to dimensjoner worst case tid: O(n 2 ) I d dimensjoner er w-c-tiden: O(n( floor(d/2)+1) ) 17

En annen metode for å finne konveks k innhylling. Denne bruker splitt og hersk -teknikken Deler først punktene opp i to like store (modulo odde tall) mengder vha. vertikale linjer 18

Første oppdeling Deler mengden i to ved x-medianen (kan finnes i lineær tid, men ikke viktig) Gjentar dette for hver mengde helt til vi får 1, 2 eller 3 punkter i hver av mengdene. 19

Konveks innhylling D l di d i j i t d di Deler disse mengdene igjen i to ved x-median, helt til vi får 2 eller 3 punkter i mengdene. 20

Tredybder 2 Ferdig oppdeling 0 1 1 2 Dybden i oppdelingen blir ikke større enn log 2 n 21

Løser det dypeste nivået Lett: Finner innhyllinger for 2 eller 3 punkter 22

Kobler sammen igjen Kobler sammen to og to innhyllinger etter trestrukturen nedenfra Metoden for dette kommer om et øyeblikk! 23

Fram til siste sammenkobling: Disse bør nå kobles sammen slik som angitt Hvordan finne disse broene?? 24

q 3 q 5 Sammenslåing av to konvekse innhyllinger: Hvordan finne øvre bro? q 4 p 1 q 2 q 1 q 7 q 6 Vet at alle x i i den ene er mindre enn alle x j i den andre. Antar at venstre innhylling er nummerert mot klokka og at den til høyre er nummerert med klokka La p1 være lengst til høyre (langs x-aksen) i sin innhylling, og q1 lengst til venstre i sin. 25

q 3 q 5 Hvordan starte sammensetningen av to? q 4 q 2 p 1 q 1 q 7 q 6 Vi kommer til å starte med den røde kanten, men vi må kunne avgjøre om en sekvens av tre punkter svinger mot høyre eller mot venstre? 26

Lite mellomspill: Hvordan kan vi finne retningsforandringen i punktet P 2 = (x 2, y 2 ) for punktsekvensen: P 1 =(x 1,y 1 ) -> P 2 =(x 2,y 2 ) -> P 3 =(x 3,y 3 ) p 3 = (x 3, y 3 ) p 3 = (x 3, y 3 ) p 3 = (x 3, y 3 ) p 2 = (x 2, y 2 ) p 2 = (x 2, y 2 ) p 2 = (x 2, y 2 ) p 1 = (x 1, y 1 ) p 1 = (x 1, y 1 ) p 1 = (x 1, y 1 ) Venstresving Rett fram Høyresving x 1 y 1 x y x 2 3 y 2 3 1 1 0 1 x 1 y 1 x y x 2 3 y 2 3 1 1 0 1 x 1 y 1 x y x 2 3 y 2 3 1 1 0 1 Dette er såkalte determinanter 27 Bergningen fremgår av neste foil

Hvordan beregne determinanten for 3x3-matriser? Gitt matrisen A: a b c A d e f g h i det( A) e a h f i d b g f i d c g e h Et morsomt skjema for å beregne 3x3-determinanter: aei afh bdi bfg cdh ceg Siden c, f og i er lik 1 i vårt tilfelle blir dette: = ae ah bd + bg + dh eg 28

Hvordan starte sammensetningen av to? q 4 q 3 q 5 q 2 p 1 q 6 q 1 q 7 Altså p 1 er lengst til høyre i sin innhylling, og q 1 lengst til venstre i sin, og vi bruker linjen (p 1, q 1 ) som utgangspunkt Når vi skal finne øvre bro går vi med nummereringen i begge polygoner Starter med å flytte på en side der p 1 -q 1 -q 2 svinger til venstre eller q 1 -p 1 -p 2 svinger til høyre. Gjelder her begge! 29

q 3 q 5 Vi får da denne situasjonen q 4 q 2 p 1 q 1 q 7 q 6 Fortsetter alltid å teste svingretning på den samme siden Her svinger p1 q2 q3 fremdeles til venstre Derfor, vi går ett hakk til på den samme siden 30

q 3 q 5 Og kommer til denne situasjonen q 4 q 2 p 1 q 1 q 7 q 6 Men nå svinger p1 q3 q4 mot høyre Dermed flytter vi oss til andre siden 31

Tester svingretning på q3 - p1- p2 p 5 p 4 p 3 q 4 p 2 q 3 q5 q 2 p 6 p 1 q 1 q 7 q 6 Denne går gal vei, så da må vi gå til motsatt side og se om vi skal flytte ett eller flere hakk opp på den siden (her p-siden) 32

q 3 q 5 Så vi får denne situasjonen p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Og ny testing på p-siden viser at vi må fortsette her 33

q 3 q 5 Til denne situasjonen p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Men nå er svingretningen riktig på p-siden Vi skifter tilbake til q-siden 34

q 3 q 5 Må da sjekke vinklen på høyre side p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Denne er gal, så vi går ett hakk videre her 35

q 3 q 5 Konveks innhylling p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Riktig vinkel på høyre side, MEN 36

q 3 q 5 Konveks innhylling p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 feil vinkel på venstre side. Må gå videre opp på den siden 37

q 3 q 5 Får situasjonen p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 38

q 3 q 5 Avslutning av øvre bro p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Vi sjekker her først svingretningen på venstre side (der vi var) og den er nå riktig. Må så sjekke om det er mer igjen på høyre side, men også her er svingretningen nå riktig Når nå begge er riktige har vi funnet øvre bro! 39

q 3 q 5 Finner nedre bro på tilsvarende måte: p 5 p 4 p 3 q 4 p 2 q 2 p 6 p 1 q 1 q 7 q 6 Må nå finne de punktene som skal kastes. Det er de vi var innom men ikke brukte under søket på broene. Resten må så om-nummereres så vi får en sammenhengende nummerering rundt det nye polygonet. 40

Tidsforbruk: Algoritme for konveks innhylling Vi sorterer først nodene etter x-koordinat. Dette tar tid O(n log n), der n er totalt antall punkter Hver gang vi spleiser to innhyllinger må vi potensielt flytte endepunktene på broen(e) O(m) ganger, der m er antall noder til sammen i de to som skal spleises. Så hver spleis tar tid O(m). All spleising på ett dybdenivå tar derfor tid: O(m 1 ) + O(m 2 ) + O(m 3 ) + + O(m k ) som blir lik O(n) siden m 1 + m 2 + m 3 + + m k = n Det er maks O(log n) nivåer, og total kjøretid blir derfor: O(n log n) 41