Quickhull - todos los puntos en casco convexo - mal rendimiento

¿Cómo evitar un mal rendimiento en el algoritmo de casco rápido, cuando todos los puntos de entrada se encuentran en un casco convexo?

preguntado el 03 de mayo de 12 a las 19:05

¿Sabe de antemano (es decir, antes de ejecutar quickhull) que todos los puntos van a estar en el casco? -

La complejidad del algoritmo QuickHull no depende (directamente) del porcentaje de puntos en el casco convexo (lo que se observa para el algoritmo de envoltura de regalos, por ejemplo) -

2 Respuestas

El rendimiento de QuickHull proviene principalmente de poder descartar una parte de la entrada con cada llamada recursiva (o iteración). Desafortunadamente, esto no sucede cuando todos los puntos se encuentran en un círculo. Incluso en este caso, todavía es posible obtener una O(n log n) rendimiento en el peor de los casos si el paso dividido proporciona una partición bastante equilibrada en cada llamada recursiva. El peor caso final que resulta en un tiempo de ejecución cuadrático es cuando tenemos divisiones muy desequilibradas (digamos que una división siempre termina vacía) en cada llamada. Debido a que esto depende en gran medida del conjunto de datos, no hay mucho que se pueda hacer al respecto.

Es posible que desee probar otros algoritmos en su lugar, como La variante de Andrew de la exploración de Graham o el MergeHull. Ambos han garantizado O(n log n) complejidad temporal en el peor de los casos.

contestado el 05 de mayo de 12 a las 10:05

Para alguna comparación de implementación de algoritmos, sugiero mirar mi artículo: Algoritmo 2D Convex Hull rápido y mejorado y su implementación en O(n log h) que comparan el rendimiento de muchos algoritmos 2D como:

  • Cadena monótona
  • Exploración de Graham
  • Delaunay/Voronoi
  • Chan
  • liu y chen
  • Ouellet (mío)

Respondido el 26 de enero de 18 a las 04:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.