Sie sind auf Seite 1von 7

17/12/2010

Problema del Convex Hull o Cerradura Convexa GEOMETRA COMPUTACIONAL


INTEGRANTES: - CALDERON NIQUIN MARKS ARTURO. - HERNANDEZ TORRES JENNIFER ROXANA. - HERRERA QUEREVAL EDSON MARTIN JAIR. - PEREZ SARMIENTO CARLOS ENRIQUE.

ALGORITM: DIVIDE Y VENCERAS

Divide y Vencers: Descripcin del algoritmo


1. Ordena los puntos por la coordenada x. 2. Divide los puntos en dos conjuntos A y B. a contiene los

Mezclando Ay B

n/2 puntos , y B la derecha de n/2 puntos.


3. Computamos el convex hull A=H(A) y b=H(B)

recursivamente.
4. Mezclamos A y B : computamos conv{AUB}

Mezclando a y b

ALGORITMO DE CHAN

17/12/2010

ALGORITMO DE CHAN
Como ya se vio, los algoritmos para calcular la cubierta convexa

Llamaremos m al estimado para h, y su valor es al menos tan

toma al menos un tiempo O(n) y que el factor log n se da porque se requiere ordenar al menos n puntos en la cubierta .
El algoritmo de Chan busca tener un tiempo de ejecucin O(n

log h), siendo h un numero inicialmente desconocido e igual al numero de puntos en la cubierta; para esto combina inteligentemente dos algoritmos ms lentos (algoritmo de Graham y la Caminata de Jarvis), pero que da como resultado un algoritmo que es ms rpido que cualquiera de los dos anteriores.

grande como h: digamos ( h <= m <= h2). Adems chan ide particionar los puntos en grupos, cada uno de tamao m (r = n/m). Se calcula la cubierta para cada grupo formado con el algoritmo de Graham (O(n log m)), pero dado que m <=h2 resulta en O(n log h) como tiempo total. Ahora lo que falta es combinar estas r cubiertas individuales para formar una sola, para esto usa el algoritmo de Caminata de Jarvis, pero tratando a cada grupo de puntos como si fuera un solo y gran punto, calculando las tangentes entre puntos (polgono de m lados) en un tiempo O(log m). Dado que el prximo vrtice de la cubierta puede estar en el mismo grupo actual, esto puedo convertirse en una especie de bsqueda binaria.

Para hallar el valor de m, el algoritmo de Chan intenta

sucesivamente valores ms grandes de m, cada vez elevando al cuadrado el valor anterior hasta que el algoritmo regrese un resultado exitoso: m = 21, 22, 24, ., 22t

Como ya se sabe

, el tiempo de ejecucin

aproximado es:

Hull(P ) :

(1) For t = 1; 2; : : : do:


m = min(2^(2^t),n) Invoke PartialHull(P, m), returning the result in L. (c) If L != ``try again'' then
(a) (b)
(a) return L.

Tenga en cuenta que 2 ^ 2 ^ t tiene el efecto de la cuadratura del valor anterior de "m". Cunto dura esta toma? La iteracin t-simo tiene: O(n log 2^2^t ) = O(n* 2^t )

Algoritmo de Chan.
PartialHull(P; m) : (1) Let r = (n/m).Particionar P en subconjuntos
n = 32

EJEMPLO:

(2)

disjuntos P(1),P(2),... P(r), cada uno de tamao a lo ms m.. For i = 1 to r do:


a) Calcular Hull(P(i)) usando el algoritmo de

Graham y almacenar los vrtices en un arreglo ordenado.


(1)

m=8 r=4

(3) (4)

p0 = (-Inf; 0) and p1 = punto ms bajo de P . For k = 1 to m do:


a) For i = 1 to r do: a) Calcular el punto q en P(i) que maximiza el ngulo p(k-1) p(k) q. b) p(k+1) = punto q in q(1),q(2),...q(r) que

(2)

(3)

maximiza el angulo p(k-1) p(k) q.

c) I f p(k+1) = p(1) then a) return {p(1), p(2), ... p(k)}.

(5)

Return "m" es demasiado pequea, intntalo de nuevo.


(4a, 4b) (4 c)

17/12/2010

DIAGRAMA POLAR
Sea S un conjunto de puntos en el plano. El Diagrama polar consiste en asignarle a cada punto s[i] del

ALGORITMO: DIAGRAMA POLAR

conjunto, una regin polar, dentro de la cual todos los puntos ven primero a s[i], antes que a cualquier otro punto de S, al realizar un barrido en sentido antihorario empezando desde los 0.

Por propiedad del Diagrama Polar se dice que pertenecen al cierre

convexo aquellos puntos cuyo eje oblicuo no intercepta a ningn semieje horizontal que parte de algn s[i] por debajo de ellos.

ALGORITMO DP Entrada: Conjunto S de n puntos Salida: Parte derecha de la envolvente convexa de S [ CH(S)] Proceso: Ondenar_descendente(S,n); PilaCrea(Env); PilaPush(Env,S(0)); PilaPush(Env,S(1)); Para i Desde 2 Hasta n Repetir t PilaPop(Env); Mientras (NOT PilaVacia(Env) AND Segmento formado por TopePila(Env) y t intercepta con el semieje horizontal que parte de S(i) ) t PilaPop(Env); Fin Mientras PilaPush(Env,t); PilaPush(Env,S(i)); Fin Para FIN

17/12/2010

2 0

17/12/2010

4 0

5 4 0

4 0

6 5 4 0

5 4 0

17/12/2010

4 0

7 4 0

4 0

8 7 4 0

7 4 0

17/12/2010

4 0

9 7 4 0

GRACIAS
9 7 4 0

Das könnte Ihnen auch gefallen