fbpx
Wikipedia

Método de Graham

El método de Graham (Graham scan) es un método de cálculo computacional de la envolvente convexa de un conjunto finito de puntos en el plano, de complejidad O(nlogn). El nombre hace honor a Ronald Graham, quien publicó el algoritmo en 1972.[1]​ El algoritmo calcula todos los vértices de la envolvente convexa ordenados a lo largo de la frontera. Puede ser fácilmente modificado para calcular los puntos que, sin ser vértices, pertenecen a dicha envolvente.

Método de Graham aplicado paso a paso para calcular la envolvente convexa de un conjunto de puntos

Algoritmo

 

El primer paso de este algoritmo consiste en encontrar el punto con la menor coordenada ordenada (menor coordenada en el eje y). Si hay más de un punto que cumpla esta condición, se escoge el punto con menor coordenada en el eje x. A este punto se lo nombra por la letra P. Este paso es de complejidad O(n), donde n es el número de puntos del problema.

Después, el conjunto de puntos debe ser ordenado en orden creciente de ángulo abarcado entre el segmento que los une con el punto P y el eje de abscisas. Para ello se puede utilizar cualquier algoritmo de ordenamiento. Para agilizar el proceso, se puede omitir el cálculo del ángulo ya que es suficiente con hallar su cotangente.


El algoritmo continúa tratando secuencia de puntos ordenados según el ángulo creciente. Para cada punto se calcula si el movimiento desde los dos anteriores es un "giro a derecha" o un "giro a izquierda". Si el movimiento es dextrógiro, indica que el segundo punto de la terna no es parte de la envolvente convexa y debe dejar de considerarse en los cálculos y tomar el siguiente. Cuando se halla un giro a izquierda, el algoritmo pasa a calcular el siguiente punto. En caso de que existan puntos alineados pertenecientes a la envolvente, los centrales pueden ser descartados o considerados como parte de la misma.

No es necesario calcular el ángulo entre tres puntos para saber si es un giro a derecha o a izquierda, pues puede conocerse ese dato con una sola operación aritmética. Para tres puntos  ,   y  , se puede calcular el producto vectorial de los dos vectores definidos por las coordenadas  ,   y  ,  , de tal manera que el resultado se obtiene con la ecuación  . Si el resultado es 0, los puntos está alineados, si es positivo, el giro es a izquierdas y, si es negativo, el giro es a derecha.

Finalmente, con este proceso se vuelve al punto P de partida, momento en el que el algoritmo está completado y solo quedan los puntos pertenecientes a la envolvente convexa correctamente ordenados.

Complejidad

El ordenamiento de los puntos tiene una complejidad O(nlogn). Aunque parezca que la complejidad del proceso es O(n2), pues para cada punto vuelve atrás para comprobar si alguno de las coordenadas anteriores lleva a un giro dextrógiro, realmente es O(n) ya que cada punto se considera como mucho en dos ocasiones en cada sentido. Cada punto puede aparecer solo una vez como   en un giro a izquierdas ya que el algoritmo avanza al siguiente punto en ese caso y como punto   en un giro a derechas, ya que en ese caso, el punto es eliminado. La complejidad total es por tanto O(nlogn) ya que el tiempo para ordenar los puntos domina sobre el tiempo necesario para calcular la envolvente.

Notas

La misma idea básica funciona si los puntos están ordenados según el eje ordenado en lugar del ángulo, y la envolvente se calcula en dos pasos, generando la parte superior y la parte inferior de la misma.

La técnica de apilar datos usada en el método de Graham es muy similar al utilizado en el problema de cálculo del valor menor más cercano, el cual puede ser usado también para calcular eficientemente envolventes convexas de una serie de puntos.[2]

Referencias

  1. Graham, R.L. (1972). An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set. Information Processing Letters 1, 132-133
  2. Berkman, Omer; Schieber, Baruch; Vishkin, Uzi (1993), «Optimal double logarithmic parallel algorithms based on finding all nearest smaller values», Journal of Algorithms 14 (3): 344-370, doi:10.1006/jagm.1993.1018 ..
  •   Datos: Q914780

método, graham, método, graham, graham, scan, método, cálculo, computacional, envolvente, convexa, conjunto, finito, puntos, plano, complejidad, nlogn, nombre, hace, honor, ronald, graham, quien, publicó, algoritmo, 1972, algoritmo, calcula, todos, vértices, e. El metodo de Graham Graham scan es un metodo de calculo computacional de la envolvente convexa de un conjunto finito de puntos en el plano de complejidad O nlogn El nombre hace honor a Ronald Graham quien publico el algoritmo en 1972 1 El algoritmo calcula todos los vertices de la envolvente convexa ordenados a lo largo de la frontera Puede ser facilmente modificado para calcular los puntos que sin ser vertices pertenecen a dicha envolvente Metodo de Graham aplicado paso a paso para calcular la envolvente convexa de un conjunto de puntos Indice 1 Algoritmo 2 Complejidad 3 Notas 4 ReferenciasAlgoritmo Editar El primer paso de este algoritmo consiste en encontrar el punto con la menor coordenada ordenada menor coordenada en el eje y Si hay mas de un punto que cumpla esta condicion se escoge el punto con menor coordenada en el eje x A este punto se lo nombra por la letra P Este paso es de complejidad O n donde n es el numero de puntos del problema Despues el conjunto de puntos debe ser ordenado en orden creciente de angulo abarcado entre el segmento que los une con el punto P y el eje de abscisas Para ello se puede utilizar cualquier algoritmo de ordenamiento Para agilizar el proceso se puede omitir el calculo del angulo ya que es suficiente con hallar su cotangente El algoritmo continua tratando secuencia de puntos ordenados segun el angulo creciente Para cada punto se calcula si el movimiento desde los dos anteriores es un giro a derecha o un giro a izquierda Si el movimiento es dextrogiro indica que el segundo punto de la terna no es parte de la envolvente convexa y debe dejar de considerarse en los calculos y tomar el siguiente Cuando se halla un giro a izquierda el algoritmo pasa a calcular el siguiente punto En caso de que existan puntos alineados pertenecientes a la envolvente los centrales pueden ser descartados o considerados como parte de la misma No es necesario calcular el angulo entre tres puntos para saber si es un giro a derecha o a izquierda pues puede conocerse ese dato con una sola operacion aritmetica Para tres puntos x 1 y 1 displaystyle x 1 y 1 x 2 y 2 displaystyle x 2 y 2 y x 3 y 3 displaystyle x 3 y 3 se puede calcular el producto vectorial de los dos vectores definidos por las coordenadas x 1 y 1 displaystyle x 1 y 1 x 2 y 2 displaystyle x 2 y 2 y x 1 y 1 displaystyle x 1 y 1 x 3 y 3 displaystyle x 3 y 3 de tal manera que el resultado se obtiene con la ecuacion x 2 x 1 y 3 y 1 y 2 y 1 x 3 x 1 displaystyle x 2 x 1 y 3 y 1 y 2 y 1 x 3 x 1 Si el resultado es 0 los puntos esta alineados si es positivo el giro es a izquierdas y si es negativo el giro es a derecha Finalmente con este proceso se vuelve al punto P de partida momento en el que el algoritmo esta completado y solo quedan los puntos pertenecientes a la envolvente convexa correctamente ordenados Complejidad EditarEl ordenamiento de los puntos tiene una complejidad O nlogn Aunque parezca que la complejidad del proceso es O n2 pues para cada punto vuelve atras para comprobar si alguno de las coordenadas anteriores lleva a un giro dextrogiro realmente es O n ya que cada punto se considera como mucho en dos ocasiones en cada sentido Cada punto puede aparecer solo una vez como x 3 y 3 displaystyle x 3 y 3 en un giro a izquierdas ya que el algoritmo avanza al siguiente punto en ese caso y como punto x 2 y 2 displaystyle x 2 y 2 en un giro a derechas ya que en ese caso el punto es eliminado La complejidad total es por tanto O nlogn ya que el tiempo para ordenar los puntos domina sobre el tiempo necesario para calcular la envolvente Notas EditarLa misma idea basica funciona si los puntos estan ordenados segun el eje ordenado en lugar del angulo y la envolvente se calcula en dos pasos generando la parte superior y la parte inferior de la misma La tecnica de apilar datos usada en el metodo de Graham es muy similar al utilizado en el problema de calculo del valor menor mas cercano el cual puede ser usado tambien para calcular eficientemente envolventes convexas de una serie de puntos 2 Referencias Editar Graham R L 1972 An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set Information Processing Letters 1 132 133 Berkman Omer Schieber Baruch Vishkin Uzi 1993 Optimal double logarithmic parallel algorithms based on finding all nearest smaller values Journal of Algorithms 14 3 344 370 doi 10 1006 jagm 1993 1018 Datos Q914780Obtenido de https es wikipedia org w index php title Metodo de Graham amp oldid 135364299, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos