+ All Categories
Home > Documents > Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD...

Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD...

Date post: 17-Feb-2019
Category:
Upload: lycong
View: 238 times
Download: 6 times
Share this document with a friend
58
Daniele Loiacono Algoritmi e Strutture Dati Geometria Computazionale
Transcript
Page 1: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

Algoritmi e Strutture DatiGeometria Computazionale

Page 2: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

2Riferimenti

T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduction to Algorithms, Second Edition

Queste trasparenze sono disponibili suhttp://dei.polimi.it/upload/loiacono

Materiale rilasciato con licenza Creative Commons Attribution-NonCommercial-ShareAlike License (http://creativecommons.org/licenses/by-nc-sa/2.5/)

2

Page 3: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

3Introduzione

La geometria computazionale è lo studio di algoritmi per risolvere problemi geometriciLavora con…

punti segmenti

poligoni set di punti

Page 4: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

4Che problemi risolve?

La geometria computazionale si occupa di risolvere problemi come:Inviluppo convesso: il più piccolo poligono convesso che contiene un insieme di puntiIntersezione di figure e di segmentiLocalizzazione di punti: dati un insieme di punti, quali cadono all’interno di una figura?Trovare la coppia di punti in un set più vicini fra loro

Questi problemi e altri simili hanno applicazioni in diversi ambiti: grafica, robotica, telecomunicazioni, ecc.

Page 5: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Problemi di base

Page 6: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

6Orientamento relativo di segmenti

ProblemaDati due segmenti P0P1 e P0P2, il segmento P0P1 segue in senso orario P0P2o antiorario?

Soluzione(x1-x0)(y2-y0) - (x2-x0)(y1-y0) > 0 ⇒ P0P1 segue in senso orario P0P2

(x1-x0)(y2-y0) - (x2-x0)(y1-y0) < 0 ⇒ P0P1 segue in senso antiorario P0P2

DimostrazioneLa soluzione si basa sul prodotto vetoriale: |P0P1xP0P2| = |P0P1||P0P2|sinϑ, dove ϑ è l’angolo che formano

Se P0 coincide con l’origine, |P0P1| = (x1-x0)i + (y1-y0)j e |P0P1| = (x2-x0)i + (y2-y0)j, con i e j vettori di lunghezza unitaria e parallelli agli assiAllora |P0P1xP0P2| = (x1-x0)(x2-x0)ixi + (y2-y0)(y1-y0)jxj +(x1-x0)(y2-y0)ixj+(x2-x0)(y1-y0)jxi = (x1-x0)(y2-y0) - (x2-x0)(y1-y0)Dal risultato è possibile capire se ϑ < 180 oppure se ϑ > 180

P0

θP1

P2

P0

P1

P2

θ

Page 7: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

7Svolta di segmenti

ProblemaDati due segmenti consecutivi P0P1 e P1P2, i due segmenti “svoltano”a sinistra oppure a destra in P1?

Soluzione(x1-x0)(y2-y0) - (x2-x0)(y1-y0) > 0 ⇒ i due segmenti svoltano a sinistra(x1-x0)(y2-y0) - (x2-x0)(y1-y0) < 0 ⇒ i due segmenti svoltano a destra

DimostrazioneÈ sufficiente considerare i due segmenti P0P1 e P0P2

Se P0P1 segue in senso orario P0P2 allora i due segmenti svoltano a sinistra, altrimenti svoltano a destra

P0

P1

P2

P0

P1P2

Page 8: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

8Intersezione di segmenti

ProblemaDati due segmenti P1P2 e P3P4, si intersecano?

SoluzioneI due segmenti si intersecano se valgono entrambe le condizioni:

• P1 e P2 si trovano da parti opposte rispetto al segmento P3P4

• P3 e P4 si trovano da parti opposte rispetto al segmento P1P2

Verificare le condizioni sopra riportate equivale a risolvere ilproblema dell’orientamento:

Attenzione al caso in cui 3 o più estremi dei segmenti siano collineari

P3

P1 P2

P4

P3

P1

P2

P4

Page 9: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Intersezione di segmenti

Page 10: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

10Definizione del problema

Dati n segmenti, esiste una coppia di segmenti che si intersecano fra diloro?Soluzione banale: O(n2)

a

b

c

de

f

Page 11: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

11

a

b

c

de

f

a ab b

ca a

bcd

bdc

ebd

bdce

fdbe

Page 12: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

12Algoritmo sweep-line

Viene costruita una lista di “eventi” corrispondenti agli estremi dei segmenti, ordinati per ascisse crescentiUna ideale linea temporale scorre parallela all’asse delle ordinateQuando incontra un estremo sinistro di un segmento

Il segmento viene inserito in una lista Si verifica se il segmento si interseca con il segmento immediatamente sopra o sotto

Quando incontra un estremo destro di un segmento:Il segmento viene rimosso dalla lista dei segmentiSi verifica se i due segmenti che si trovano immediatamente sopra e immediatamente sotto a quello appena rimosso si intersecano

ComplessitàVerifica al più l’intersezione fra 2n coppie di segmeniRichiede un ordinamento di 2n estremi

⇒ Costo complessivo O(nlogn)

Page 13: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Inviluppo convesso

Page 14: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

14Definizione del problema

Dato un insieme di n punti, il loro inviluppo convesso è definito come il più piccolo poligono convesso che racchiude tutti i punti dati

La soluzione è un insieme di punti ordinato che definiscono i vertici di un poligonoTutti i punti soluzione del problema appartengono all’insieme datoIl poligono dovrà avere da 3 ad n lati

Page 15: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

15Soluzione “brute force”

Soluzione a forza brutaConsideriamo ciascuna coppia di punti P e Q nell’insieme datoSe tutti gli altri punti si trovano dalla stessa parte rispetto al segmento PQ, allora PQ appartiene all’inviluppo

Costo computazionaleOccorre considerare tutte le coppie di punti nell’insieme dato⇒ sono necessarie Θ(n2) iterazioniCiascuna iterazione comporta l’analisi di tutti gli n-2 punti restanti⇒ ogni iterazione costa Θ(n)Il costo totale è perciò Θ(n3)

Possiamo fare di meglio?

Page 16: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

16Soluzione incrementale

InizializzazionePrendiamo tre puntiL’inviluppo coincide con i tre punti stessi

Passo induttivo:Aggiungiamo un puntoSe il punto è interno, l’inviluppo resta invariatoSe il punto è esterno

• Lo aggiungo all’inviluppo• Rimuovo dall’inviluppo i punti interni

Definizione della soluzioneCome aggiungo i punti?Come determino i punti da rimuovere?

Page 17: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

17Soluzione incrementale: come aggiungo i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

Page 18: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

18Soluzione incrementale: come aggiungo i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

Page 19: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

19Soluzione incrementale: come aggiungo i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

Page 20: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

20Soluzione incrementale: come aggiungo i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

Page 21: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

21Soluzione incrementale: come aggiungo i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

Page 22: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

22Soluzione incrementale: come aggiungere i punti?

Ordiniamo i punti per ascissa crescente nell’insieme PInizializzo l’inviluppo L con i primi tre punti in P (cioè quelli con ascissa più bassa)I punti vengono inseriti nell’inviluppo L in modo che seguano il senso orarioAd ogni passo consideriamo il punto successivo in P

Ha ascissa maggiore di tutti i punti presenti in LSarà perciò esterno all’inviluppo definito da L e dovrà quindi essere aggiunto

?

Page 23: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

23Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 24: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

24Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 25: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

25Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 26: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

26Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 27: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

27Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 28: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

28Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 29: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

29Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 30: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

30Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

Page 31: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

31Soluzione incrementale: quali punti rimuovere?

Sia pi il punto da aggiungere:tracciamo un segmento pipj per tutti i punti pj

individuiamo il segmento pipo che segue tutti gli altri in senso orarioindividuiamo il segmento pipa che precede tutti gli altri in senso orario i segmenti pipo e pipa fanno necessariamente parte dell’inviluppo e quindi pi sostituirà tutti i punti in L contenuti fra po e pa in senso orario

ComplessitàO(nlogn) per l’ordinamento inizialeO(n2) per la ricerca di tutti i punti da rimuovere

Si può fare ancora meglio?Scansione di GrahamAlgoritmo di Jarvis

Page 32: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

32Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 33: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

33Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 34: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

34Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 35: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

35Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 36: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

36Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 37: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

37Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 38: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

38Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 39: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

39Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 40: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

40Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 41: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

41Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 42: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

42Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 43: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

43Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 44: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

44Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Page 45: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

45Scansione di Grahm

Si parte dal punto p0 con ordinata minimaSi calcola l’angolo fra p0 e tutti gli altri punti rispetto all’asse delle ascisseSi ordina tutti gli altri punti rispetto ad angoli crescenti e si prosegue come segue

Ad ogni passo si aggiunge all’inviluppo il prossimo punto in P rispetto all’ordinamento effettuatoSe il segmento aggiunto svolta a sinistra rispetto al precedente si prosegueSe il segmento aggiunto svolta a destra rispetto al precedente, il punto appena aggiunto e il precedente vengono rimossi e si prosegue dal puntoimmediatamente successivo

Costo: O(nlogn)

Page 46: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

46Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 47: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

47Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 48: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

48Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 49: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

49Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 50: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

50Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 51: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

51Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Page 52: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

52Algoritmo di Jarvis

Si parte dal punto p0 con ordinata minimaAd ogni iterazione

viene aggiunto all’inviluppo il segmento pipj tale da formare il minore angolo con l’asse positivo delle ascissesi prosegue allo stesso modo finche viene raggiunto il punto con ordinata maggioreRaggiunto tale punto, si aggiunge ad ogni iterazione il segmento pipj tale da formare il minore angolo con l’asse negativo delle ascisse

Costo: O(nh)

[h numero di vertici]

Page 53: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Coppia di punti più vicini

Page 54: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

54Definizione

Dato un insieme di n punti in uno spazio 2D, qual’è la coppia di punti più vicina fra loro? E quanto distano fra di loro?

L’approccio a forza bruta richiede n(n-1)/2 confronti ed ha perciò costo pari ad O(n2)Possiamo fare di meglio?

δ

Page 55: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

55Approccio Divide et Impera

Ordiniamo i punti secondo le loro ascisse e dividiamo con una linea verticale il set di punti in due subset di uguale dimensione

PLPR

Page 56: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

56Approccio Divide et Impera

Ordiniamo i punti secondo le loro ascisse e dividiamo con una linearverticale il set di punti in due subset di uguale dimensione

I punti più vicini sono individuati da uno dei seguenti tre casi:La coppia di punti più vicini in PL

La coppia di punti più vicini in PR

Una coppia di punti a cavallo fra PLe PR

PLPR

δR

δL

δ?

Page 57: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

57Approccio Divide et Impera (2)

La coppia di punti più vicina in PLe PR si ottiene risolvendo ricorsivamente i due sottoproblemiPer individuare invece una coppia di punti a cavallo fra PLe PR è possibile fare le seguenti osservazioni

Sia δ=min(δL,δR) allora le possibili soluzioni si trovano vicino alla linea che divide i due sottoproblemi:

Inoltre in un rettangolo di dimensione 2δxδ ci possono essere al massimo 8 punti

δδ

δδ

δ

Page 58: Algoritmi e Strutture Dati - Intranet DEIBhome.deib.polimi.it/loiacono/uploads/Teaching/ASD/ASD 12...Algoritmi e Strutture Dati Geometria Computazionale Daniele Loiacono Riferimenti

Daniele Loiacono

58Approccio Divide et Impera (3)

Possiamo allora risolvere il problema di trovare i due punti più vicini in P:1. risolvere il sottoproblema PL

2. risolvere il sottoproblema PR

3. cercare fra i punti distanti non più di δ dalla linea di divisione se c’èuna coppia di punti più vicina

Il punto 3 può essere risolto in maniera efficace ordinando i punti per le ordinate e considerando per ogni punto solo i successivi 7 puntiComplessità

L’algoritmo ha complessità O(nlog2n)Se implementato in maniera opportuna, costruendo ricorsivamenteanche l’ordinamento dei punti rispetto alle ordinate, l’algoritmo ha complessità O(nlogn)


Recommended