Articulo de referencia

Algoritmo de Chan

Una demostración en 2D del algoritmo de Chan. Sin embargo, tenga en cuenta que el algoritmo divide los puntos de manera arbitraria, no por la coordenada x. En geometría computac...

Una demostración en 2D del algoritmo de Chan. Sin embargo, tenga en cuenta que el algoritmo divide los puntos de manera arbitraria, no por la coordenada x.

En geometría computacional , el algoritmo de Chan , [1] llamado así por Timothy M. Chan , es un algoritmo óptimo sensible a la salida para calcular la envoltura convexa de un conjunto de puntos, en un espacio bidimensional o tridimensional. El algoritmo lleva tiempo, donde es el número de vértices de la salida (la envoltura convexa). En el caso planar, el algoritmo combina un algoritmo ( Graham scan , por ejemplo) con Jarvis march ( ), para obtener un tiempo óptimo. El algoritmo de Chan es notable porque es mucho más simple que el algoritmo de Kirkpatrick-Seidel , y se extiende naturalmente al espacio tridimensional. Este paradigma [2] ha sido desarrollado independientemente por Frank Nielsen en su tesis doctoral. [3] PAG {\estilo de visualización P} norte {\estilo de visualización n} Oh ( norte registro yo ) {\displaystyle O(n\log h)} yo {\estilo de visualización h} Oh ( norte registro norte ) {\displaystyle O(n\log n)} Oh ( norte yo ) {\displaystyle O(nh)} Oh ( norte registro yo ) {\displaystyle O(n\log h)}

Algoritmo

Descripción general

Una sola pasada del algoritmo requiere un parámetro que esté entre 0 y (número de puntos de nuestro conjunto ). Lo ideal sería que , pero , el número de vértices en la envoltura convexa de salida, no se conozca al principio. Se realizan varias pasadas con valores crecientes de que luego finalizan cuando (ver más abajo sobre la elección del parámetro ). metro {\estilo de visualización m} norte {\estilo de visualización n} PAG {\estilo de visualización P} metro = yo {\displaystyle m=h} yo {\estilo de visualización h} metro {\estilo de visualización m} metro yo {\displaystyle m\geq h} metro {\estilo de visualización m}

El algoritmo comienza dividiendo arbitrariamente el conjunto de puntos en subconjuntos con como máximo puntos cada uno; observe que . PAG {\estilo de visualización P} K = norte / metro {\displaystyle K=\lceil n/m\rceil} ( Q a ) a = 1 , 2 , . . . K {\displaystyle (Q_{k})_{k=1,2,...K}} metro {\estilo de visualización m} K = Oh ( norte / metro ) {\displaystyle K=O(n/m)}

Para cada subconjunto , calcula la envoltura convexa, , utilizando un algoritmo (por ejemplo, el escaneo de Graham ), donde es el número de puntos en el subconjunto. Como hay subconjuntos de puntos cada uno, esta fase lleva tiempo. Q a {\displaystyle Q_{k}} do a Estilo de visualización C_{k}} Oh ( pag registro pag ) {\displaystyle O(p\log p)} pag {\estilo de visualización p} K {\estilo de visualización K} Oh ( metro ) {\displaystyle O(m)} K Oh ( metro registro metro ) = Oh ( norte registro metro ) {\displaystyle K\cdot O(m\log m)=O(n\log m)}

Durante la segunda fase, se ejecuta la marcha de Jarvis , haciendo uso de las (mini) envolturas convexas precalculadas, . En cada paso de este algoritmo de la marcha de Jarvis, tenemos un punto en la envoltura convexa (al principio, puede ser el punto en con la coordenada y más baja, que se garantiza que está en la envoltura convexa de ), y necesitamos encontrar un punto tal que todos los demás puntos de estén a la derecha de la línea [ aclaración necesaria ] , donde la notación simplemente significa que el siguiente punto, es decir , se determina como una función de y . La envoltura convexa del conjunto , , es conocida y contiene como máximo puntos (enumerados en sentido horario o antihorario), lo que permite calcular en el tiempo mediante búsqueda binaria [ ¿ cómo? ] . Por lo tanto, el cálculo de para todos los subconjuntos se puede hacer en el tiempo. Entonces, podemos determinar usando la misma técnica que normalmente se usa en la marcha de Jarvis, pero solo considerando los puntos (es decir, los puntos en las mini envolturas convexas) en lugar de todo el conjunto . Para esos puntos, una iteración de la marcha de Jarvis es que es despreciable en comparación con el cálculo para todos los subconjuntos. La marcha de Jarvis se completa cuando el proceso se ha repetido veces (porque, en la forma en que funciona la marcha de Jarvis, después de como máximo iteraciones de su bucle más externo, donde es el número de puntos en la envoltura convexa de , debemos haber encontrado la envoltura convexa), por lo tanto, la segunda fase toma tiempo, equivalente al tiempo si es cercano a (ver más abajo la descripción de una estrategia a elegir de manera que este sea el caso). ( do a ) a = 1 , 2 , . . . K {\displaystyle (C_{k})_{k=1,2,...K}} pag i estilo de visualización p_{i}} pag i estilo de visualización p_{i}} PAG {\estilo de visualización P} PAG {\estilo de visualización P} pag i + 1 = F ( pag i , PAG ) {\displaystyle p_{i+1}=f(p_{i},P)} PAG {\estilo de visualización P} pag i pag i + 1 estilo de visualización p_{i}p_{i+1}} pag i + 1 = F ( pag i , PAG ) {\displaystyle p_{i+1}=f(p_{i},P)} pag i + 1 estilo de visualización p_{i+1}} pag i estilo de visualización p_{i}} PAG {\estilo de visualización P} Q a {\displaystyle Q_{k}} do a Estilo de visualización C_{k}} metro {\estilo de visualización m} F ( pag i , Q a ) {\displaystyle f(p_{i},Q_{k})} Oh ( registro metro ) {\displaystyle O(\log m)} F ( pag i , Q a ) {\displaystyle f(p_{i},Q_{k})} K {\estilo de visualización K} Oh ( K registro metro ) {\displaystyle O(K\log m)} F ( pag i , PAG ) {\displaystyle f(p_{i},P)} ( F ( pag i , Q a ) ) 1 a K {\displaystyle (f(p_{i},Q_{k}))_{1\leq k\leq K}} PAG {\estilo de visualización P} Oh ( K ) {\displaystyle O(K)} Oh ( yo ) {\displaystyle O(h)} yo {\estilo de visualización h} yo {\estilo de visualización h} PAG {\estilo de visualización P} Oh ( K yo registro metro ) {\displaystyle O(Kh\log m)} Oh ( norte registro yo ) {\displaystyle O(n\log h)} metro {\estilo de visualización m} yo {\estilo de visualización h} metro {\estilo de visualización m}

Ejecutando las dos fases descritas anteriormente, se calcula la envoltura convexa de puntos en el tiempo. norte {\estilo de visualización n} Oh ( norte registro yo ) {\displaystyle O(n\log h)}

Elección del parámetrometro

Si se elige un valor arbitrario para , puede ocurrir que . En ese caso, después de los pasos de la segunda fase, interrumpimos la marcha de Jarvis porque llevarla hasta el final llevaría demasiado tiempo. En ese momento, se habrá gastado un tiempo y no se habrá calculado la envoltura convexa. metro {\estilo de visualización m} metro < yo {\displaystyle m<h} metro {\estilo de visualización m} Oh ( norte registro metro ) {\displaystyle O(n\log m)}

La idea es realizar múltiples pasadas del algoritmo con valores crecientes de ; cada pasada termina (con éxito o sin éxito) en el tiempo. Si aumenta demasiado lentamente entre pasadas, el número de iteraciones puede ser grande; por otro lado, si aumenta demasiado rápido, la primera para la que el algoritmo termina con éxito puede ser mucho mayor que , y producir una complejidad . metro {\estilo de visualización m} Oh ( norte registro metro ) {\displaystyle O(n\log m)} metro {\estilo de visualización m} metro {\estilo de visualización m} yo {\estilo de visualización h} Oh ( norte registro metro ) > Oh ( norte registro yo ) {\displaystyle O(n\log m)>O(n\log h)}

Estrategia de cuadratura

Una posible estrategia es elevar al cuadrado el valor de en cada iteración, hasta un valor máximo de (que corresponde a una partición en conjuntos singleton). [4] Partiendo de un valor de 2, en la iteración se elige . En ese caso, se realizan iteraciones, dado que el algoritmo termina una vez que tenemos metro {\estilo de visualización m} norte {\estilo de visualización n} a {\estilo de visualización t} metro = mín. ( norte , 2 2 a ) {\displaystyle m=\min \left(n,2^{2^{t}}\right)} Oh ( registro registro yo ) {\displaystyle O(\log \log h)}

metro = 2 2 a yo registro ( 2 2 a ) registro yo 2 a registro yo registro 2 a registro registro yo a registro registro yo , {\displaystyle m=2^{2^{t}}\geq h\iff \log \left(2^{2^{t}}\right)\geq \log h\iff 2^{t}\geq \log h\iff \log {2^{t}}\geq \log {\log h}\iff t\geq \log {\log h},}

con el logaritmo tomado en base , y el tiempo total de ejecución del algoritmo es 2 {\estilo de visualización 2}

a = 0 registro registro yo Oh ( norte registro ( 2 2 a ) ) = Oh ( norte ) a = 0 registro registro yo 2 a = Oh ( norte 2 1 + registro registro yo ) = Oh ( norte registro yo ) . {\displaystyle \sum _{t=0}^{\lceil \log \log h\rceil }O\left(n\log \left(2^{2^{t}}\right)\right)=O(n)\sum _{t=0}^{\lceil \log \log h\rceil }2^{t}=O\left(n\cdot 2^{1+\lceil \log \log h\rceil }\right)=O(n\log h).}

En tres dimensiones

Para generalizar esta construcción para el caso tridimensional, se debe utilizar un algoritmo para calcular la envoltura convexa tridimensional de Preparata y Hong en lugar del escaneo de Graham, y se debe utilizar una versión tridimensional de la marcha de Jarvis. La complejidad temporal sigue siendo . [1] Oh ( norte registro norte ) {\displaystyle O(n\log n)} Oh ( norte registro yo ) {\displaystyle O(n\log h)}

Pseudocódigo

En el siguiente pseudocódigo, el texto entre paréntesis y en cursiva son comentarios. Para comprender completamente el siguiente pseudocódigo, se recomienda que el lector ya esté familiarizado con los algoritmos de Graham Scan y Jarvis March para calcular la envoltura convexa, , de un conjunto de puntos, . do {\estilo de visualización C} PAG {\estilo de visualización P}

Entrada: Conjunto con puntos. PAG {\estilo de visualización P} norte {\estilo de visualización n}
Salida: Conjunto con puntos, la envoltura convexa de . do {\estilo de visualización C} yo {\estilo de visualización h} PAG {\estilo de visualización P}
(Elija un punto que esté garantizado que esté en : por ejemplo, el punto con la coordenada y más baja). PAG {\estilo de visualización P} do {\estilo de visualización C}
(Esta operación lleva tiempo: por ejemplo, podemos simplemente iterar a través de ). Oh ( norte ) {\displaystyle {\mathcal {O}}(n)} PAG {\estilo de visualización P}
pag 1 := PAG I do K _ S yo A R yo ( PAG ) {\displaystyle p_{1}:=SELECCIONAR\_INICIO(P)}
( se utiliza en la parte de la marcha de Jarvis de este algoritmo de Chan, pag 0 estilo de visualización p_{0}}
de modo que para calcular el segundo punto, , en la envoltura convexa de .) pag 2 {\estilo de visualización p_{2}} PAG {\estilo de visualización P}
(Nota: no es un punto de .) pag 0 estilo de visualización p_{0}} PAG {\estilo de visualización P}
(Para más información, consulte los comentarios cerca de la parte correspondiente del algoritmo de Chan).
pag 0 := ( , 0 ) {\displaystyle p_{0}:=(-\infty,0)}
(Nota: , no se conoce el número de puntos en la envoltura convexa final de .) yo {\estilo de visualización h} PAG {\estilo de visualización P}
(Estas son las iteraciones necesarias para descubrir el valor de , que es una estimación de ). metro {\estilo de visualización m} yo {\estilo de visualización h}
( es necesario para que este algoritmo de Chan encuentre la envoltura convexa de .) yo metro {\displaystyle h\leq m} PAG {\estilo de visualización P}
(Más específicamente, queremos , para no realizar demasiadas iteraciones innecesarias yo metro yo 2 {\displaystyle h\leq m\leq h^{2}}
y entonces la complejidad temporal de este algoritmo de Chan es .) Oh ( norte registro yo ) {\displaystyle {\mathcal {O}}(n\log h)}
(Como se explicó anteriormente en este artículo, se utiliza una estrategia en la que se requieren como máximo iteraciones para encontrar ). registro registro norte {\displaystyle \log \log n} metro {\estilo de visualización m}
(Nota: el final puede no ser igual a , pero nunca es menor que ni mayor que .) metro {\estilo de visualización m} yo {\estilo de visualización h} yo {\estilo de visualización h} yo 2 estilo de visualización h^{2}}
(Sin embargo, este algoritmo de Chan se detiene una vez que se realizan las iteraciones del bucle más externo, yo {\estilo de visualización h}
es decir, incluso si , no realiza iteraciones del bucle más externo). metro yo {\displaystyle m\neq h} metro {\estilo de visualización m}
(Para obtener más información, consulte la parte de la marcha de Jarvis de este algoritmo a continuación, donde se devuelve si ). do {\estilo de visualización C} pag i + 1 == pag 1 estilo de visualización p_{i+1}==p_{1}}
para hacer 1 a registro registro norte {\displaystyle 1\leq t\leq \log \log n}
(Establecer parámetro para la iteración actual. Se utiliza un "esquema de cuadratura" como se describe anteriormente en este artículo. metro {\estilo de visualización m}
Existen otros esquemas: por ejemplo, el "esquema de duplicación", donde , para . metro = 2 a {\displaystyle m=2^{t}} a = 1 , , registro yo {\displaystyle t=1,\puntos ,\left\lceil \log h\right\rceil }
Sin embargo, si se utiliza el "esquema de duplicación", la complejidad temporal resultante de este algoritmo de Chan es .) Oh ( norte registro 2 yo ) {\displaystyle {\mathcal {O}}(n\log ^{2}h)}
metro := 2 2 a {\displaystyle m:=2^{2^{t}}}
(Inicialice una lista (o matriz) vacía para almacenar los puntos de la envoltura convexa de , a medida que se encuentran). PAG {\estilo de visualización P}
do := ( ) {\estilo de visualización C:=()}
A D D ( do , pag 1 ) {\displaystyle SUMA(C,p_{1})}
(Dividir arbitrariamente el conjunto de puntos en subconjuntos de aproximadamente elementos cada uno). PAG {\estilo de visualización P} K = norte metro {\displaystyle K=\left\lceil {\frac {n}{m}}\right\rceil } metro {\estilo de visualización m}
Q 1 , Q 2 , , Q K := S PAG yo I yo ( PAG , metro ) {\displaystyle Q_{1},Q_{2},\puntos ,Q_{K}:=DIVIDIR(P,m)}
(Calcular la envoltura convexa de todos los subconjuntos de puntos, .) K {\estilo de visualización K} Q 1 , Q 2 , , Q K {\displaystyle Q_{1},Q_{2},\puntos ,Q_{K}}
(Toma tiempo.) Oh ( K metro registro metro ) = Oh ( norte registro metro ) {\displaystyle {\mathcal {O}}(Km\log m)={\mathcal {O}}(n\log m)}
Si , entonces la complejidad temporal es .) metro yo 2 estilo de visualización m\leq h^{2}} Oh ( norte registro yo 2 ) = Oh ( norte registro yo ) {\displaystyle {\mathcal {O}}(n\log h^{2})={\mathcal {O}}(n\log h)}
para hacer 1 a K {\displaystyle 1\leq k\leq K}
(Calcule la envoltura convexa del subconjunto , , utilizando el escaneo de Graham, lo que lleva tiempo). a {\estilo de visualización k} Q a {\displaystyle Q_{k}} Oh ( metro registro metro ) {\displaystyle {\mathcal {O}}(m\log m)}
( es la envoltura convexa del subconjunto de puntos .) do a Estilo de visualización C_{k}} Q a {\displaystyle Q_{k}}
do a := GRAMO R A yo A METRO _ S do A norte ( Q a ) {\displaystyle C_{k}:=GRAHAM\_SCAN(Q_{k})}
(En este punto, se han calculado las envolturas convexas de los respectivos subconjuntos de puntos ). C 1 , C 2 , , C K {\displaystyle C_{1},C_{2},\dots ,C_{K}} Q 1 , Q 2 , , Q K {\displaystyle Q_{1},Q_{2},\dots ,Q_{K}}
(Ahora, utilice una versión modificada del algoritmo de marcha de Jarvis para calcular la envoltura convexa de ). P {\displaystyle P}
(La marcha de Jarvis se realiza a tiempo, donde es el número de puntos de entrada y es el número de puntos en la envoltura convexa). O ( n h ) {\displaystyle {\mathcal {O}}(nh)} n {\displaystyle n} h {\displaystyle h}
(Dado que Jarvis march es un algoritmo sensible a la salida , su tiempo de ejecución depende del tamaño de la envoltura convexa ). h {\displaystyle h}
(En la práctica, significa que Jarvis march realiza iteraciones de su bucle más externo. h {\displaystyle h}
En cada una de estas iteraciones, realiza como máximo iteraciones de su bucle más interno). n {\displaystyle n}
(Queremos , por lo que no queremos realizar más de iteraciones en el siguiente bucle externo). h m h 2 {\displaystyle h\leq m\leq h^{2}} m {\displaystyle m}
(Si la corriente es menor que , es decir , no se puede encontrar la envoltura convexa de ). m {\displaystyle m} h {\displaystyle h} m < h {\displaystyle m<h} P {\displaystyle P}
(En esta versión modificada de la marcha de Jarvis, realizamos una operación dentro del bucle más interno que lleva tiempo. O ( log m ) {\displaystyle {\mathcal {O}}(\log m)}
Por lo tanto, la complejidad temporal total de esta versión modificada es
O ( m K log m ) = O ( m n m log m ) = O ( n log m ) = O ( n log 2 2 t ) = O ( n 2 t ) . {\displaystyle {\mathcal {O}}(mK\log m)={\mathcal {O}}(m\left\lceil {\frac {n}{m}}\right\rceil \log m)={\mathcal {O}}(n\log m)={\mathcal {O}}(n\log 2^{2^{t}})={\mathcal {O}}(n2^{t}).}
Si , entonces la complejidad temporal es .) m h 2 {\displaystyle m\leq h^{2}} O ( n log h 2 ) = O ( n log h ) {\displaystyle {\mathcal {O}}(n\log h^{2})={\mathcal {O}}(n\log h)}
para hacer 1 i m {\displaystyle 1\leq i\leq m}
(Nota: aquí ya se conoce un punto en la envoltura convexa de , es decir .) P {\displaystyle P} p 1 {\displaystyle p_{1}}
(En este bucle for interno, se calculan los posibles próximos puntos que estarán en la envoltura convexa de , , ). K {\displaystyle K} P {\displaystyle P} q i , 1 , q i , 2 , , q i , K {\displaystyle q_{i,1},q_{i,2},\dots ,q_{i,K}}
(Cada uno de estos posibles puntos siguientes proviene de un origen diferente : K {\displaystyle K} C k {\displaystyle C_{k}}
es decir, es un posible siguiente punto en la envoltura convexa de la cual es parte de la envoltura convexa de .) q i , k {\displaystyle q_{i,k}} P {\displaystyle P} C k {\displaystyle C_{k}}
(Nota: depende de : es decir, para cada iteración , hay posibles próximos puntos que pueden estar en la envoltura convexa de .) q i , 1 , q i , 2 , , q i , K {\displaystyle q_{i,1},q_{i,2},\dots ,q_{i,K}} i {\displaystyle i} i {\displaystyle i} K {\displaystyle K} P {\displaystyle P}
(Nota: en cada iteración , solo uno de los puntos entre se agrega a la envoltura convexa de ). i {\displaystyle i} q i , 1 , q i , 2 , , q i , K {\displaystyle q_{i,1},q_{i,2},\dots ,q_{i,K}} P {\displaystyle P}
para hacer 1 k K {\displaystyle 1\leq k\leq K}
( encuentra el punto tal que el ángulo se maximiza [ ¿por qué? ] , J A R V I S _ B I N A R Y _ S E A R C H {\displaystyle JARVIS\_BINARY\_SEARCH} d C k {\displaystyle d\in C_{k}} p i 1 p i d {\displaystyle \measuredangle p_{i-1}p_{i}d}
donde es el ángulo entre los vectores y . Tal se almacena en .) p i 1 p i d {\displaystyle \measuredangle p_{i-1}p_{i}d} p i p i 1 {\displaystyle {\overrightarrow {p_{i}p_{i-1}}}} p i d {\displaystyle {\overrightarrow {p_{i}d}}} d {\displaystyle d} q i , k {\displaystyle q_{i,k}}
(No es necesario calcular los ángulos directamente: se puede utilizar la prueba de orientación [ ¿cómo? ] .)
( se puede realizar a tiempo [ ¿cómo? ] ) J A R V I S _ B I N A R Y _ S E A R C H {\displaystyle JARVIS\_BINARY\_SEARCH} O ( log m ) {\displaystyle {\mathcal {O}}(\log m)}
(Nota: en la iteración , se conoce y es un punto en la envoltura convexa de : i = 1 {\displaystyle i=1} p i 1 = p 0 = ( , 0 ) {\displaystyle p_{i-1}=p_{0}=(-\infty ,0)} p 1 {\displaystyle p_{1}} P {\displaystyle P}
En este caso, es el punto con la coordenada y más baja). P {\displaystyle P}
q i , k := J A R V I S _ B I N A R Y _ S E A R C H ( p i 1 , p i , C k ) {\displaystyle q_{i,k}:=JARVIS\_BINARY\_SEARCH(p_{i-1},p_{i},C_{k})}
(Elija el punto que maximiza el ángulo [ ¿por qué? ] para que sea el siguiente punto en la envoltura convexa de .) z { q i , 1 , q i , 2 , , q i , K } {\displaystyle z\in \{q_{i,1},q_{i,2},\dots ,q_{i,K}\}} p i 1 p i z {\displaystyle \measuredangle p_{i-1}p_{i}z} P {\displaystyle P}
p i + 1 := J A R V I S _ N E X T _ C H _ P O I N T ( p i 1 , p i , ( q i , 1 , q i , 2 , , q i , K ) ) {\displaystyle p_{i+1}:=JARVIS\_NEXT\_CH\_POINT(p_{i-1},p_{i},(q_{i,1},q_{i,2},\dots ,q_{i,K}))}
(La marcha de Jarvis termina cuando el siguiente punto seleccionado en la envoltura convexa, , es el punto inicial, .) p i + 1 {\displaystyle p_{i+1}} p 1 {\displaystyle p_{1}}
si p i + 1 == p 1 {\displaystyle p_{i+1}==p_{1}}
(Devuelve la envoltura convexa que contiene puntos.) P {\displaystyle P} i = h {\displaystyle i=h}
(Nota: por supuesto, no es necesario devolver que es igual a ). p i + 1 {\displaystyle p_{i+1}} p 1 {\displaystyle p_{1}}
devolver C := ( p 1 , p 2 , , p i ) {\displaystyle C:=(p_{1},p_{2},\dots ,p_{i})}
demás
A D D ( C , p i + 1 ) {\displaystyle ADD(C,p_{i+1})}
(Si después de iteraciones no se ha encontrado un punto tal que , entonces .) m {\displaystyle m} p i + 1 {\displaystyle p_{i+1}} p i + 1 == p 1 {\displaystyle p_{i+1}==p_{1}} m < h {\displaystyle m<h}
(Necesitamos empezar de nuevo con un valor más alto para .) m {\displaystyle m}

Implementación

El artículo de Chan contiene varias sugerencias que pueden mejorar el rendimiento práctico del algoritmo, por ejemplo:

  • Al calcular las envolturas convexas de los subconjuntos, elimine los puntos que no estén en la envoltura convexa para que no se consideren en ejecuciones posteriores.
  • Las envolturas convexas de conjuntos de puntos más grandes se pueden obtener fusionando envolturas convexas calculadas previamente, en lugar de volver a calcular desde cero.
  • Con la idea anterior, el costo dominante del algoritmo reside en el preprocesamiento, es decir, el cálculo de las envolturas convexas de los grupos. Para reducir este costo, podemos considerar reutilizar las envolturas calculadas a partir de la iteración anterior y fusionarlas a medida que aumenta el tamaño del grupo.

Extensiones

El artículo de Chan contiene algunos otros problemas cuyos algoritmos conocidos pueden lograrse con una salida óptima utilizando su técnica, por ejemplo:

  • Calcular la envolvente inferior de un conjunto de segmentos de línea, que se define como el límite inferior del trapezoide ilimitado formado por las intersecciones. L ( S ) {\displaystyle L(S)} S {\displaystyle S} n {\displaystyle n}
  • Hershberger [5] presentó un algoritmo que puede acelerarse hasta , donde h es el número de aristas en la envolvente. O ( n log n ) {\displaystyle O(n\log n)} O ( n log h ) {\displaystyle O(n\log h)}
  • Construcción de algoritmos sensibles a la salida para envolventes convexas de dimensiones superiores. Con el uso de puntos de agrupación y estructuras de datos eficientes, se puede lograr la complejidad siempre que h sea de orden polinomial en . O ( n log h ) {\displaystyle O(n\log h)} n {\displaystyle n}

Véase también

Referencias

  1. ^ ab Chan, Timothy M. (1996). "Algoritmos de envoltura convexa sensibles a la salida óptima en dos y tres dimensiones". Geometría discreta y computacional . 16 (4): 361–368. doi : 10.1007/BF02712873 .
  2. ^ Nielsen, Frank (2000). "Agrupamiento y consulta: un paradigma para obtener algoritmos sensibles a la salida". Geometría discreta y computacional . Apuntes de clase en informática. Vol. 1763. págs. 250–257. doi : 10.1007/978-3-540-46515-7_21 . ISBN . 978-3-540-67181-7.
  3. ^ Frank Nielsen. "Geometría computacional adaptativa". Tesis doctoral, INRIA , 1996.
  4. ^ Chazelle, Bernard ; Matoušek, Jiří (1995). "Desaleatorización de un algoritmo de envoltura convexa sensible a la salida en tres dimensiones". Geometría computacional . 5 : 27–32. doi : 10.1016/0925-7721(94)00018-Q .
  5. ^ Hershberger, John (1989). "Encontrar la envolvente superior de n segmentos de línea en tiempo O(n log n)". Information Processing Letters . 33 (4): 169–174. doi :10.1016/0020-0190(89)90136-1.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Chan%27s_algorithm&oldid=1216100766"