16
Divide & Conquer: problema del par más cercano Geometría Computacional. Lic. Yessika Labrador

Divide & Conquer: problema del par más cercano

  • Upload
    shiloh

  • View
    44

  • Download
    2

Embed Size (px)

DESCRIPTION

Divide & Conquer: problema del par más cercano. Geometría Computacional. Lic. Yessika Labrador. Contenido. Introducción. El Problema. Solución por Fuerza Bruta. Solución Divide & Conquer. Conclusión. Introducción. - PowerPoint PPT Presentation

Citation preview

Page 1: Divide & Conquer: problema del par más cercano

Divide & Conquer: problema del par más

cercano

Geometría Computacional.

Lic. Yessika Labrador

Page 2: Divide & Conquer: problema del par más cercano

Contenido Introducción. El Problema. Solución por Fuerza Bruta. Solución Divide & Conquer. Conclusión

Page 3: Divide & Conquer: problema del par más cercano

Introducción La geometría computacional se encarga del diseño y

análisis de algoritmos para resolver problemas geométricos.

Son útiles en campos como la graficación por computadora, estadística, procesamiento de imágenes, etc.

Page 4: Divide & Conquer: problema del par más cercano

El problema del par más cercano Dado un conjunto Q de n puntos en el plano, con n≥2,

determinar un par de puntos más cercanos.

La unidad de medida de distancia es la distancia euclidiana:

Page 5: Divide & Conquer: problema del par más cercano

Algoritmo de fuerza brutaParMásCercanoFB

minDist ∞para cada p in P:

para cada q in P: si p ≠ q y dist(p,q) < minDist:

minDist dist(p,q) parCercano (p,q)

retornar parCercano

Tiempo del algoritmo: O(n2)

Page 6: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer. Toma como entrada las matrices X e Y, X,Y Q. X está ordenada monótonamente creciente por la

coordenada x. Y está ordenada por la coordenada y. Si |P|≤3 se realiza la invocación del método de fuerza. Si |P|>3 la invocación recursiva se lleva a cabo.

Page 7: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer. Divide:

Se encuentra una línea vertical l que divide a P en dos: PL y PR, |PL| = (|P|/2) , |PR| = (|P|/2)

X se divide en XL y XR. Y se divide en YL y YR.

Page 8: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer. Conquer:

Se hacen dos llamadas recursivas: para encontrar el par más cercano de puntos en el PL y para encontrar el par más cercano de puntos en PR.

Dado δL y δR δ = min(δL, δR).

Page 9: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer. Composición de soluciones:

El par más cercano es el par con la distancia δ encontrada por las llamadas recursivas.

Es un par de puntos con un punto en el PL y el otro en PR.

Page 10: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer. Los puntos deben estar en la franja vertical de

ancho 2δ con centro en l. Se crea Y', con los puntos de Y que están en la

franja. Para cada punto p en Y', buscamos la distancia

entre p y los próximos 7 puntos en Y'. Si δ'<δ retorna δ', en caso contrario retorna δ.

Page 11: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer.Correctitud del Algoritmo: |P|≤3 nos aseguramos de que no tratamos de resolver

un subproblema consiste en un solo punto.

Sólo tenemos que comprobar los 7 puntos posteriores a cada punto P de Y'.

Page 12: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer.parMásCercano (XP, YP)

Si N ≤ 3 entonces retornar par más cercano con algoritmo de fuerza brutaSino xL puntos de XP hasta (N/2) xR puntos de XP desde (N/2) xm xP(techo(N/2))

yL { p ∈ yP : px ≤ xm } yR { p ∈ yP : px > xm }

(dmin, parMin) menorPar(parMásCercano (xL, yL), parMásCercano (xR, yR))

Y’ { p YP : |xm - px| < dmin }

para cada p Y’ para los 7 sucesores de p Y’ si |p - q| < dmin entonces

(dmin, parMin) (|p - q|, {p, q})

retornar (dmin, parMin)

Page 13: Divide & Conquer: problema del par más cercano

Algoritmo Divide & Conquer.

Tiempo de Ejecución Preordenar el arreglo O(n logn)

T(n), tiempo de ejecución de cada etapa recursiva. T'(n), tiempo de ejecución del algoritmo total.

T'(n) = T(n) + O(n lgn)

T(n) = 2T(n/2)+O(n) si n>3 O(1) si n≤3

Entonces, T(n)=O(n lgn) y T'(n)=O(n lgn).

Page 14: Divide & Conquer: problema del par más cercano

Conclusión El algoritmo Divide & Conquer O(n lgn) es mucho más

eficiente que un algoritmo de fuerza bruta O(n2).

Page 15: Divide & Conquer: problema del par más cercano

Al considerar las posibles posiciones de los puntos en el rectángulo, Lerner y Johnsonbaugh demostraron que basta comparar cada punto de la franja con los siguientes tres puntos.

Existen otros enfoques (triangulación de Delaunay, diagrama de Voronoi) que toman O(n lgn) para el problema en el plano. Sin embargo no son eficaces para dimensiones >2. El algoritmo Divide&Conquer puede ser generalizado para tomar O(n lgn).

Page 16: Divide & Conquer: problema del par más cercano

Divide & Conquer: problema del par más

cercano