Algoritmo de Chen

El algoritmo de Chen es un algoritmo para construir el casco convexo de un conjunto finito de puntos en un plano. Es una combinación de dos algoritmos más lentos ( escaneo de Graham y envoltura de Jarvis ). La desventaja del escaneo de Graham es la necesidad de clasificar todos los puntos por ángulo polar , lo que lleva bastante tiempo . La envoltura de Jarvis requiere iterar sobre todos los puntos para cada uno de los puntos del casco convexo , que en el peor de los casos toma . Nombrado por Timothy M. Chan .

Descripción del algoritmo

La idea del algoritmo de Chen es dividir inicialmente todos los puntos en grupos de piezas en cada uno. En consecuencia, el número de grupos es igual a . Para cada uno de los grupos, se construye un casco convexo escaneando Graham para , es decir, tomará tiempo para todos los grupos .

Luego, comenzando desde el punto inferior izquierdo, se construye un casco convexo Jarvis común para los cascos resultantes. En este caso, el siguiente punto adecuado para el casco convexo está detrás , ya que para encontrar un punto con una tangente máxima con respecto al punto considerado en el -gon, basta gastar (los puntos en el -gon fueron ordenados por ángulo polar durante la ejecución del algoritmo de escaneo de Graham). Como resultado, se necesita tiempo para moverse .

Es decir, el algoritmo de Chan funciona para , y si obtiene , entonces para .

Casco (P, m) 1) tomar . Divida en subconjuntos disyuntivos de cardinalidad no más de ; 2) para i = 1 a r hacer : (a) calcule el casco convexo de Graham ( ), almacene los vértices en una matriz ordenada polar; 3) tomar el punto más a la izquierda y más bajo de ; 4) para k = 1 a m hacer (a) para i = 1 a r hacer encontrar y recordar el punto con el ángulo máximo ; (b) tomar como punto desde con el ángulo máximo ; (c) si regresa ; 5) devuelve pequeño, inténtalo de nuevo;

Elección del número de puntos m

Está claro que el recorrido de Jarvis, y por lo tanto todo el algoritmo, funcionará correctamente solo si , pero ¿cómo saber de antemano cuántos puntos habrá en el casco convexo? Es necesario ejecutar el algoritmo varias veces, eligiendo y, si , el algoritmo devolverá un error. Si realiza la selección mediante búsqueda binaria en , terminará con el tiempo , que es bastante largo.

El proceso se puede acelerar comenzando con un valor pequeño y luego aumentándolo significativamente hasta que funcione . Por ejemplo, tome . En este caso , la iteración -i tomará . El proceso de búsqueda terminará cuando , es decir, (  es el logaritmo binario).

Al final

ChanHull (P) para t = 1 an hacer: (a) tomar ; (b) L = Casco (P, m); (c) si L != " pequeño, inténtalo de nuevo" devuelve L;

Literatura