Lee Algoritmos Capitulo Muestra c04

38
8/18/2019 Lee Algoritmos Capitulo Muestra c04 http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 1/38 capítulo 4 La estrategia divide-y-vencerás Esta estrategia constituye un poderoso paradigma para definir algoritmos eficientes. Este método primero divide un problema en dos subproblemas más pequeños de modo que cada subproblema sea idéntico al problema original, excepto porque su tamaño de entrada es menor. Luego, ambos subproblemas se resuelven y las subsoluciones se fusionan en la solución final. Una cuestión muy importante sobre esta estrategia es que divide el problema ori- ginal en dos subproblemas idénticos al problema original. Por lo tanto, también estos dos subproblemas pueden resolverse aplicando la estrategia divide-y-vencerás. O, para decirlo con otras palabras, se resuelven de manera recurrente o recursiva. Consideremos el sencillo problema de encontrar el máximo (número mayor) de un conjunto  de n números. La estrategia divide-y-vencerás resolvería este problema al dividir la entrada en dos conjuntos, cada uno con n  /2 números. Sean 1  y 2 estos dos conjuntos.  Luego se encuentra el máximo de 1  y 2 , respectivamente. Sea X i , i  1, 2, el máximo de i . Así, el máximo de  puede encontrarse al comparar  X 1  y  X 2 . El que sea mayor de éstos será el máximo de . En el análisis anterior casualmente se mencionó que es necesario encontrar el máximo  X i . Pero, ¿cómo se encuentra X i ? Nuevamente puede aplicarse la estrategia di- vide-y-vencerás. Es decir, i se divide en dos subconjuntos, se encuentran los máximos de estos subconjuntos y después de fusionan los resultados.  En general, un algoritmo divide-y-vencerás consta de tres pasos. Paso 1. Si el tamaño del problema es pequeño, éste se resuelve aplicando algún método directo; en caso contrario, el problema original se separa en dos subproblemas, de preferencia del mismo tamaño. Paso 2. Los dos subproblemas se resuelven de manera recurrente aplicando el algoritmo divide-y-vencerás a los subproblemas. Paso 3. Las soluciones de los subproblemas se fusionan en una solución del pro- blema original. 119

Transcript of Lee Algoritmos Capitulo Muestra c04

Page 1: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 1/38

c a p í t u l o

4La estrategia divide-y-vencerás

Esta estrategia constituye un poderoso paradigma para definir algoritmos eficientes.Este método primero divide un problema en dos subproblemas más pequeños de modoque cada subproblema sea idéntico al problema original, excepto porque su tamañode entrada es menor. Luego, ambos subproblemas se resuelven y las subsoluciones se

fusionan en la solución final.Una cuestión muy importante sobre esta estrategia es que divide el problema ori-

ginal en dos subproblemas idénticos al problema original. Por lo tanto, también estosdos subproblemas pueden resolverse aplicando la estrategia divide-y-vencerás. O, paradecirlo con otras palabras, se resuelven de manera recurrente o recursiva.

Consideremos el sencillo problema de encontrar el máximo (número mayor) de unconjunto S  de n números. La estrategia divide-y-vencerás resolvería este problema aldividir la entrada en dos conjuntos, cada uno con n /2 números. Sean S 1 y S 2 estos dosconjuntos. Luego se encuentra el máximo de S 1 y S 2, respectivamente. Sea X i, i  1, 2,el máximo de S i. Así, el máximo de S  puede encontrarse al comparar X 1 y X 2. El quesea mayor de éstos será el máximo de S .

En el análisis anterior casualmente se mencionó que es necesario encontrar elmáximo X i. Pero, ¿cómo se encuentra X i? Nuevamente puede aplicarse la estrategia di-vide-y-vencerás. Es decir, S i se divide en dos subconjuntos, se encuentran los máximosde estos subconjuntos y después de fusionan los resultados. 

En general, un algoritmo divide-y-vencerás consta de tres pasos.

Paso 1. Si el tamaño del problema es pequeño, éste se resuelve aplicando algúnmétodo directo; en caso contrario, el problema original se separa en dos

subproblemas, de preferencia del mismo tamaño.Paso 2. Los dos subproblemas se resuelven de manera recurrente aplicando el

algoritmo divide-y-vencerás a los subproblemas.Paso 3. Las soluciones de los subproblemas se fusionan en una solución del pro-

blema original.

119

Page 2: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 2/38

120  Capítulo  4

La recurrencia del paso 2 crea subproblemas cada vez más pequeños. Al final estossubproblemas son tan pequeños que cada uno puede resolverse directa y fácilmente.

A continuación se mostrará el significado de la estrategia divide-y-vencerás me-diante su aplicación para resolver el problema de encontrar el máximo. Imagine quese tienen ocho números: 29, 14, 15, 1, 6, 10, 32 y 12. La estrategia divide-y-vencerásencuentra el máximo de estos ocho números, lo cual se muestra en la figura 4-1.

Como se muestra en la figura 4-1, primero se separan los ocho números en dos sub-conjuntos y luego cada uno de ellos se divide en dos subconjuntos que constan de dosnúmeros. Debido a que un subconjunto sólo contiene dos números, este subconjuntoya no se divide más. El máximo se determina con una simple comparación de estosdos números.

Una vez que se determinan los cuatro máximos, comienza la fusión. Así, 29 secompara con 15 y 10 se compara con 32. Finalmente, al comparar 32 y 29 se encuentra

que el máximo es 32.En general, la complejidad T (n) de un algoritmo divide-y-vencerás se determinacon la siguiente fórmula:

FIGURA 4-1  Estrategia divide-y-vencerás para encontrar el máximode ocho números.

29, 14 15, 1 6, 10 32, 12

6, 10, 32, 12

29 15

29, 14, 15, 1

10 32

29, 14, 15, 1, 6, 10, 32, 12

32

29 32

 

T nT n S n M n n c

b n c( )

( / ) ( ) ( )

2 2   ≥

Page 3: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 3/38

  La estrategia divide-y-vencerás 121

donde S (n) denota los pasos temporales necesarios para dividir el problema en dossubproblemas, M (n) denota los pasos temporales necesarios para fusionar las dos sub-soluciones y b  es una constante. Para el problema de encontrar el máximo, la se-paración y la fusión requieren un número constante de pasos. En consecuencia,se tiene

Si se supone que n  2k , se tiene

El lector debe observar que la estrategia divide-y-vencerás se aplicó dos veces

para encontrar el máximo sólo con fines ilustrativos. Resulta evidente que en estecaso la estrategia divide-y-vencerás no es demasiado efectiva porque con una ex-ploración directa de estos n  números y al hacer n    1 comparaciones tambiénse encuentra el máximo y se tiene la misma eficacia que con la estrategia divide-y-vencerás. No obstante, en los siguientes apartados se demostrará que en muchos ca-sos, sobre todo en problemas geométricos, la estrategia divide-y-vencerás es realmentebuena.

4-1  El problema de cómo encontrar puntos

máximos en un espacio bidimensional

En el espacio bidimensional se dice que un punto ( x 1, y1) domina a ( x 2, y2) si x 1   x 2 y y1   y2. Un punto se denomina máximo si ningún otro punto lo domina. Dado un con- junto de n puntos, el problema de encontrar los máximos consiste en encontrar todoslos puntos máximos de entre estos n puntos. Por ejemplo, los puntos encerrados en uncírculo en la figura 4-2 son puntos máximos.

 

T nT n n

n( )

( / )

.

2 2 1 2

1 2

T (n) 2T (n /2) 1

2(2T (n /4) 1) 1

M

2k 1T (2)

 

20

2 j

 j

2k 1 2k 1

1

2k  1

n 1.

Page 4: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 4/38

122  Capítulo  4

Un método directo para resolver el problema de encontrar los máximos consisteen comparar cada par de puntos. Este método directo requiere O(n2) comparaciones depuntos. Como se mostrará a continuación, si se aplica la estrategia divide-y-vencerás,el problema puede resolverse en O(n log n) pasos, lo cual constituye, de hecho, unamejora bastante aceptable.

Si se aplica la estrategia divide-y-vencerás, primero se encuentra la recta mediana L perpendicular al eje x , que divide en dos subconjuntos todo el conjunto de puntos,como se muestra en la figura 4-3. Los conjuntos de puntos a la izquierda de  L y a la

derecha de L se denotan por S  L y S  R, respectivamente.

 X 

FIGURA 4-2  Puntos máximos.

FIGURA 4-3  Los puntos máximos de S  L y S  R.

 X 

 L

P13

P12

P11

P14P7

P6

P5

P4P3

P2

P1

S  L S  R

P8

P9

P10

Page 5: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 5/38

  La estrategia divide-y-vencerás 123

El siguiente paso es encontrar en forma recurrente los puntos máximos de S  L y S  R.Como se muestra en la figura 4-3, P1, P2 y P3 son puntos máximos de S  L y P8, P9 y P10

son puntos máximos de S  R.El proceso de fusión es muy sencillo. Debido a que el valor  x  de un punto en S 

 R 

siempre es mayor que el valor x  de todo punto en S  L, un punto en S  L es un máximo si ysólo si su valor y no es menor que el valor y de un máximo de S  R. Por ejemplo, para elcaso que se muestra en la figura 4-3, P3 debe eliminarse porque es dominado por P8 enS  R. El conjunto de puntos máximos de S  es P1, P2, P8, P9 y P10.

Con base en el análisis anterior, podemos resumir como sigue el algoritmo divide-y-vencerás para resolver el problema de cómo encontrar los puntos máximos en unespacio bidimensional:

Algoritmo 4-1 ▫ Un método divide-y-vencerás para encontrar

puntos máximos en un plano

Input:  Un conjunto de n puntos planos.Output:  Los puntos máximos de S .Paso 1. Si S   sólo contiene un punto, proporcionarlo como el máximo. En caso

contrario, encontrar una recta L perpendicular al eje x  que separe el con- junto de puntos en dos subconjuntos S  L y S  R, cada uno con n /2 puntos.

Paso 2. Los puntos máximos de S  L y S  R se encuentran de manera recursiva.Paso 3.  Los puntos máximos de S  L y S  R se proyectan sobre L y se ordenan según

sus valores y. Sobre las proyecciones se realiza una exploración lineal ycada uno de los puntos máximos de S  L se elimina si su valor  y es menorque el valor y de algún punto máximo de S  R.

La complejidad temporal de este algoritmo depende de las complejidades tempo-rales de los pasos siguientes:

1. En el paso 1 hay una operación que encuentra la mediana de n números. Después

se demostrará que esto puede hacerse en O(n) pasos.2. En el paso 2 hay dos subproblemas, cada uno con n /2 puntos.3. En el paso 3, la proyección y la exploración lineal pueden hacerse en O(n log n)

pasos después de ordenar los n puntos según sus valores y.

Hacer T (n) la complejidad temporal del algoritmo divide-y-vencerás para encon-trar puntos máximos de n puntos en un plano. Entonces

Page 6: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 6/38

124  Capítulo  4

Así, se ha obtenido un algoritmo O(n log2 n). Es necesario recordar al lector quesi se aplica un método directo para revisar cada par de puntos exhaustivamente, serequieren O(n2) pasos.

Se observa que la estrategia divide-y-vencerás es dominada por el ordenamientoen los pasos de fusión (o mezcla). De alguna manera, ahora no se está realizando un

trabajo muy eficiente porque el ordenamiento debe hacerse de una vez por todas. Esdecir, debe hacerse un preordenamiento. Si esto se lleva a cabo, entonces la compleji-dad de la mezcla es O(n) y el número total de pasos necesarios es

y fácilmente se encuentra que T (n) es O(n log n). Así, la complejidad temporal totalde usar la estrategia divide-y-vencerás para encontrar puntos máximos con preordena-miento es O(n log n). En otras palabras, se ha obtenido un algoritmo aún más eficiente.

4-2  El problema del par más cercano

(closest neighbor)

Este problema se define como sigue: dado un conjunto S  de n puntos, encontrar un par

de puntos que sean los más cercanos entre sí. El problema unidimensional del par máscercano puede resolverse en O(n log n) pasos al ordenar los n números y realizandouna exploración lineal. Al examinar la distancia entre cada par de puntos adyacentes enla lista ordenada es posible determinar el par más cercano.

En el espacio bidimensional la estrategia divide-y-vencerás puede aplicarse paradiseñar un algoritmo eficiente a fin de encontrar el par más cercano. Así como se hizocuando se resolvió el problema de cómo encontrar el máximo, el conjunto S primero se

T nT n O n O n n n

n( )

( / ) ( ) ( log )

.

2 2 1

1 1

Sea n  2k 

. Es fácil demostrar que

T (n)   O(n log n) O(n log2n)

O(n log2n).

O(n log n) T (n)

donde

 

T nT n O n O n n

n

( )( / ) ( ) ( )

2 2 1

1 1

Page 7: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 7/38

  La estrategia divide-y-vencerás 125

parte en S  L y S  R de modo que todo punto en S  L esté a la izquierda de todo punto en S  R yel número de puntos en S  L sea igual al número de puntos en S  R. Es decir, se encuentrauna recta vertical L perpendicular al eje x  de modo que S  se corte en dos subconjuntosdel mismo tamaño. Al resolver el problema del par más cercano en S 

 L y S 

 R, respecti-

vamente, se obtienen d  L y d  R, donde d  L y d  R denotan las distancias de los pares máscercanos en S  L y S  R, respectivamente. Sea d   mín(d  L, d  R). Si el par más cercano (Pa,Pb) de S  consta de un punto en S  L y un punto en S  R, entonces Pa y Pb deben estar en elinterior de una franja central en la recta L y acotada por las rectas L  d  y L  d , comose muestra en la figura 4-4.

El análisis anterior indica que durante el paso de fusión sólo deben examinarse lospuntos que se encuentran en la franja. Aunque en promedio el número de puntos dela franja central no puede ser muy grande, en el peor de los casos habrá no más de n puntos. Así, el método de la fuerza bruta para encontrar el par más cercano en la franjarequiere calcular n2 /4 distancias y comparaciones. Este tipo de paso de fusión no esbueno para nuestro algoritmo divide-y-vencerás. Afortunadamente, como se demostra-rá a continuación, el paso de fusión puede completarse en tiempo O(n).

Si un punto P en S  L y un punto Q en S  R constituyen un par más cercano, entonces ladistancia entre P y Q debe ser menor que d . Por lo tanto, no es necesario considerar unpunto que esté demasiado lejos de P. Considere la figura 4-5. En esta figura basta ana-lizar la región sombreada. Si P está exactamente en la recta L, esta región sombreada esmáxima. Incluso en este caso, esta región sombreada estará contenida en el rectángulo A de d   2d , como se muestra en la figura 4-6. Así, sólo es necesario examinar lospuntos dentro de este rectángulo A.

FIGURA 4-4  El problema del par más cercano.

 L

S  L

d  L

 L d L d 

d  R

S  R

d mín(d  L, d  R)

Page 8: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 8/38

126  Capítulo  4

La pregunta que falta es: ¿cuántos puntos hay en el rectángulo A? Como se sabeque la distancia entre cada par de puntos tanto en S  L como en S  R es mayor o igual a d ,en este rectángulo sólo puede haber a lo sumo seis puntos, que se muestran en la figura4-6. Con base en esta observación se sabe que en el paso de fusión, para cada puntoen la franja, solamente es necesario examinar un número limitado de puntos en la otramitad de la franja. Sin pérdida de generalidad, puede suponerse que P está en la mitadizquierda de la franja. Sea y p el valor y de P. Para P sólo es necesario examinar puntos

en la otra mitad de la franja cuyos valores y estén entre y p  d  y y p  d . Como vimosantes, cuando mucho hay seis puntos así.

FIGURA 4-5  Región limitada a examinar en el proceso de fusióndel algoritmo divide-y-vencerás del par más cercano.

 p

FIGURA 4-6  Rectángulo A que contiene los posibles vecinos más cercanos de P.

2d P

 A

Page 9: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 9/38

  La estrategia divide-y-vencerás 127

Como ya se analizó, antes de aplicar el algoritmo divide-y-vencerás es necesarioordenar los n puntos según su valor y. Después de hacer el preordenamiento, el paso defusión se lleva a cabo en sólo O(n) pasos.

A continuación se aplica el algoritmo divide-y-vencerás para resolver el problemabidimensional del par más cercano.

Algoritmo 4-2 ▫ Un algoritmo divide-y-vencerás para resolver

el problema bidimensional del par más cercano

Input: Un conjunto S  de n puntos en el plano.Output: La distancia entre los dos puntos más cercanos.Paso 1. Ordenar los puntos en S  según sus valores y y sus valores x .Paso 2. Si S  contiene un solo punto, regresar  como su distancia.Paso 3. Buscar una recta mediana L perpendicular al eje x  para dividir S  en dos

subconjuntos del mismo tamaño: S  L y S  R. Todo punto en S  L está a la iz-quierda de L y todo punto en S  R está a la derecha de L.

Paso 4. Recursivamente aplicar el paso 2 y el paso 3 para resolver los problemas 

de los pares más cercanos de S  L y S  R. Sea d  L(d  R) la distancia entre el parmás cercano en S  L(S  R). Sea d   mín(d  L, d  R).

Paso 5. Proyectar sobre la recta L todos los puntos dentro de la franja acotada por L – d  y  L  d . Para un punto P en la semifranja acotada por  L  d  y  L,hacer  y p su valor  y. Para cada uno de tales puntos P, en la semifranja

acotada por L y L 

 d  encontrar todos los puntos cuyo valor y esté entre y p  d  y y p  d . Si la distancia d  entre P y un punto en la otra semifranjaes menor que d , sea d   d . El valor final de d  es la respuesta.

La complejidad temporal del algoritmo completo es igual a O(n log n)  T (n) y

T (n) 2T (n /2) S (n)  M (n)

donde S (n) y M (n) son las complejidades temporales del paso de separación en el paso

3 y del paso de fusión en el paso 4. El paso de separación se lleva a cabo en O(n) pasosporque los puntos ya están ordenados según sus valores  x . El paso de fusión primerotiene que encontrar todos los puntos dentro de L – d  y L 

 d . De nuevo, ya que los pun-tos están ordenados sobre el eje x , puede llevarse a cabo en O(n) pasos. Para cada puntocuando mucho es necesario examinar otros 12 puntos, 6 de ellos en cada semifranja.Así, esta exploración lineal requiere O(n) pasos. En otras palabras, la complejidadtemporal del paso de fusión es O(n).

Page 10: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 10/38

128  Capítulo  4

Así,

Puede demostrarse fácilmente que

T (n) O(n logn).

La complejidad temporal total es

O(n log n)(complejidad del preordenamiento)  O(n log n)  O(n log n).

4-3  El problema del convex hull

Este problema se mencionó por primera vez en el capítulo 2. En esta sección se demos-trará que este problema del convex hull puede resolverse de manera elegante mediantela estrategia divide-y-vencerás.

Un polígono convexo es un polígono con la propiedad de que cualquier segmentode recta que une dos puntos cualesquiera dentro del polígono debe estar dentro delpolígono. En la figura 4-7a) se muestra un polígono no convexo y en la figura 4-7b) semuestra un polígono convexo.

El convex hull de un conjunto de puntos planos se define como el menor polígonoconvexo que contiene todos los puntos. Por ejemplo, en la figura 4-8 se muestra unconvex hull típico.

FIGURA 4-7 Polígonos cóncavo y convexo.

a) b)

 

T nT n O n O n n

n( )

( / ) ( ) ( )

2 2 1

1 1.

Page 11: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 11/38

  La estrategia divide-y-vencerás 129

Para encontrar un convex hull puede aplicarse la estrategia divide-y-vencerás.Considere la figura 4-9. En esta figura, el conjunto de puntos planos se ha divididoen dos subconjuntos S  L y S  R por medio de una recta perpendicular al eje x . Luego seconstruyen conjuntos convexos para S  L y S  R, denominados Hull( H  L) y Hull( H  R), res-pectivamente. Para combinar Hull( H  L) y Hull( H  R) en un convex hull puede aplicarseel algoritmo de Graham.

Para llevar a cabo el algoritmo de búsqueda de Graham se escoge un punto interior.Este punto se considera como el origen. Así, cada otro punto forma un ángulo polar conrespecto a este punto interior. Luego todos los puntos se ordenan con respecto a estosángulos polares. El algoritmo de Graham analiza los puntos uno por uno y eliminaaquellos que producen ángulos reflexivos, como se ilustra en la figura 4-10. En estafigura se eliminan h, f , e e i. Los puntos restantes son vértices de un convex hull.

FIGURA 4-8  Un convex hull.

FIGURA 4-9  Estrategia divide-y-vencerás para construir un convex hull.

 j

i

g

h

 p

S  L

 Ld 

e

 f 

a

b

c

S  R

Page 12: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 12/38

130  Capítulo  4

Para llevar a cabo una búsqueda de Graham después que se han construido Hull(S  L)y Hull(S  R), es posible seleccionar un punto interior P de Hull(S  L). Por ser un polígonoconvexo, debe resultar evidente para el lector que no es necesario examinar los puntosen el interior de los convex hull. Desde la perspectiva de P, Hull(S  R) está en la seccióncuyo ángulo origen es menor que o igual a  . Este punto (en forma de cuña) está for-mado por los dos vértices u y v de Hull(S  R) que pueden encontrarse en tiempo linealaplicando el siguiente procedimiento: se traza una recta horizontal que pasa por P. Siesta recta corta a Hull(S  R), entonces Hull(S  R) está en la sección determinada por los dosvértices de Hull(S  R) que tienen el mayor ángulo polar    /2 y el menor ángulo polar 3  /2, respectivamente. Si la recta horizontal que pasa por P no corta a Hull(S 

 R

), lasección está determinada por los vértices que originan el ángulo polar mayor y el me-nor con respecto a P. En la figura 4-9 estos puntos son a y d . De esta forma, hay tressecuencias de puntos que tienen ángulos polares crecientes con respecto a P, un puntointerior de S  L. Las tres secuencias son:

  1. g, h, i, j, k  2. a, b, c, d  

y 3.  f , e.

Estas tres secuencias pueden fusionarse en una. En nuestro caso, la secuencia fu-

sionada es

g, h, a, b, f , c, e, d , i, j, k .

Ahora es posible aplicar la búsqueda de Graham a esta secuencia para eliminarpuntos que no pueden ser vértices del convex hull. Para el caso que se muestra en lafigura 4-9, el convex hull resultante se muestra en la figura 4-11.

FIGURA 4-10  Búsqueda de Graham.

a

b

c

e

 f 

h

i

 j

g

Page 13: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 13/38

  La estrategia divide-y-vencerás 131

A continuación se presenta el algoritmo divide-y-vencerás para construir un con-vex hull.

Algoritmo 4-3 ▫ Un algoritmo para construir un convex hull

con base en la estrategia divide-y-vencerás

Input:  Un conjunto S  de puntos planos.Output: Un convex hull para S .Paso 1. Si S  no contiene más de cinco puntos, para encontrar el convex hull se usa

búsqueda exhaustiva y luego se regresa.

Paso 2. Buscar una recta mediana perpendicular al eje x  que divida a S  en S  L y S  R;S  L está a la izquierda de S  R.

Paso 3. Recursivamente se construyen conjuntos convexos para S  L  y S  R. Estosconjuntos convexos se denotan por Hull(S  L) y Hull(S  R), respectivamente.

Paso 4. Buscar un punto interior P de S  L. Buscar los vértices v1 y v2 de Hull (S  R)que divide los vértices de Hull (S  R) en dos secuencias de vértices quetienen ángulos polares crecientes con respecto a P. Sin pérdida de genera-lidad, se supone que el valor y de v1 es mayor que el valor y de v2. Luegose forman tres secuencias como sigue:

  a) Secuencia 1: todos los vértices del convex hull de Hull(S  L) en direc-ción contraria al movimiento de las manecillas del reloj.

  b) Secuencia 2: los vértices del convex hull de Hull(S  R) de v2  a v1 endirección contraria al movimiento de las manecillas del reloj.

  c) Secuencia 3: los vértices del convex hull de Hull(S  R) de v2  a v1 endirección del movimiento de las manecillas del reloj.

FIGURA 4-11  El convex hull para los puntos en la figura 4-9.

 j

g

a

b

c

Page 14: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 14/38

132  Capítulo  4

Estas tres secuencias se fusionan y se lleva a cabo una búsqueda deGraham. Se eliminan los puntos que son reflexivos (porque producenuna concavidad en un polígono convexo). Los puntos restantes forman

el convex hull.

La complejidad temporal del algoritmo anterior es determinada esencialmente porel proceso de separación y el proceso de fusión. La complejidad temporal del proce-so de separación es O(n) porque éste es un proceso de determinación de la media-na. La complejidad temporal del proceso de fusión es O(n) porque para llevar a cabola búsqueda del punto interior, la determinación de los puntos extremos, la fusión y labúsqueda de Graham se requieren O(n) pasos. Así, T (n)  2T (n /2)  O(n)  O(n log n).

4-4  Diagramas de Voronoi construidoscon la estrategia divide-y-vencerás

El diagrama de Voronoi constituye, como el árbol de expansión mínima mencionadoen el capítulo 3, una estructura de datos muy interesante. Esta estructura de datos pue-de usarse para almacenar información importante sobre los vecinos más cercanos depuntos en un plano.

Se considerará el caso de dos puntos como se muestra en la figura 4-12. En estafigura, la recta L12 es una bisectriz perpendicular de la recta que une P1 y P2. L12 es eldiagrama de Voronoi para P1 y P2. Para todo punto X  situado en el semiplano que estáa la izquierda (derecha) de L

12, el vecino más cercano de X , de entre P

1 y P

2, es P

1(P

2).

En cierto sentido, dado cualquier punto  X , para encontrar un vecino más cercano de X  no es necesario calcular la distancia entre  X  y P1 y la distancia entre  X  y P2. Envez de ello, sólo se requiere determinar a qué lado de  L12 está X . Esto puede hacersepor sustitución de las coordenadas de X  en L12. Dependiendo del signo del resultado deesta sustitución es posible determinar dónde esta ubicado X .

FIGURA 4-12  Diagrama de Voronoi para dos puntos.

P1 P2

 L12

Page 15: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 15/38

  La estrategia divide-y-vencerás 133

Considere la figura 4-13, donde cada Lij es una bisectriz perpendicular de la rectaque une Pi y P j. Los tres hiperplanos L12, L13 y L23 constituyen el diagrama de Voronoipara los puntos P1, P2 y P3. Si un punto está ubicado en Ri, entonces su vecino máscercano entre P

1, P

2 y P

3 es P

i.

Para definir el diagrama de Voronoi de un conjunto de puntos en el plano, primero

se debe definir el polígono de Voronoi.

Definición

Dados dos puntos Pi y P j en un conjunto S  de n puntos, sea H (Pi, P j) el semiplanoque contiene los puntos más cercanos a Pi. El polígono de Voronoi asociado conPi es una región poligonal convexa que no tiene más de n – 1 lados, definida porV (i)

i j

I  H (Pi, P j).

En la figura 4-14 se muestra un polígono de Voronoi. Dado un conjunto de n puntos,el diagrama de Voronoi incluye todos los polígonos de Voronoi de estos puntos. Losvértices del diagrama de Voronoi se denominan puntos de Voronoi, y sus segmentos sedenominan bordes de Voronoi. (El nombre Voronoi se refiere a un famoso matemáticoruso.) En la figura 4-15 se muestra un diagrama de Voronoi para seis puntos.

FIGURA 4-13  Diagrama de Voronoi para tres puntos.

 R1 P1

 R3

P3 L13

 L23

 L12

 R2P2

Page 16: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 16/38

134  Capítulo  4

 La línea recta dual de un diagrama de Voronoi se denomina triangulación Delau-

nay, en honor de un famoso matemático francés. En una triangulación Delaunay hayun segmento de recta que une Pi y P j si y sólo si los polígonos de Voronoi de Pi y P j comparten el mismo borde. Por ejemplo, para el diagrama de Voronoi en la figura 4-15,

su triangulación Delaunay se muestra en la figura 4-16.Los diagramas de Voronoi son muy útiles para varias cosas. Por ejemplo, es posi-ble resolver el denominado problema de los pares más cercanos al extraer informacióndel diagrama de Voronoi. A partir del diagrama de Voronoi también es posible encon-trar un árbol de expansión mínima.

Un diagrama de Voronoi puede construirse a la manera divide-y-vencerás con elalgoritmo de la página siguiente.

FIGURA 4-14  Polígono de Voronoi.

FIGURA 4-15  Diagrama de Voronoi para seis puntos.

P5 P4

P1

P3

P2

P6

Page 17: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 17/38

  La estrategia divide-y-vencerás 135

Algoritmo 4-4 ▫ Algoritmo divide-y-vencerás para construir

diagramas de Voronoi

Input:  Un conjunto S  de n puntos planos.Output:  El diagrama de Voronoi de S .Paso 1. Si S  contiene un solo punto, return.Paso 2. Find una recta mediana L perpendicular al eje x  que divida a S  en S  L y S  R 

de modo que S  L (S  R) esté a la izquierda (derecha) de  L y el tamaño de S  L sea igual al tamaño de S 

 R.

Paso 3. Recursivamente, construir diagramas de Voronoi de S  L y S  R. Denote porVD(S  L) y VD(S  R) estos diagramas.

Paso 4. Construir un hiperplano lineal por partes divisorio  HP que sea el lugargeométrico de puntos simultáneamente más cercanos a un punto en S  L ya un punto en S  R. Eliminar todos los segmentos de VD(S  L) que estén a laderecha de HP y todos los segmentos de VD(S  R) que estén a la izquierdade HP. La gráfica resultante es el diagrama de Voronoi.

Este algoritmo puede entenderse al considerar la figura 4-17. Para fusionar VD(S  L)y VD(S  R), se observa que sólo aquellas partes de VD(S  L) y VD(S  R) cercanas a L interfie-ren entre sí. Los puntos alejados de L no son afectados por el paso de fusión, de modoque permanecen intactos.

El paso más importante al fusionar VD(S  L) y VD(S  R) es construir el hiperplano li-neal por partes divisorio HP. Este hiperplano tiene la siguiente propiedad: si un puntoP está dentro de la parte izquierda (derecha) de HP, entonces el vecino más cercano de

FIGURA 4-16  Una triangulación Delaunay.

P5 P4

P1

P3

P2

P6

Page 18: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 18/38

136  Capítulo  4

P debe ser un punto en S  L(S  R). Véase la figura 4-17. El HP para VD(S  L) y VD(S  R) semuestra en la figura 4-18.

FIGURA 4-17  Dos diagramas de Voronoi después del paso 2.

FIGURA 4-18  El hiperplano lineal por partes para el conjunto de puntos

que se muestra en la figura 4-17.

P1P4

P2

P7

P3P6

P5

VD(S  L) VD(S  R)

 L

P12

P13

P9

P10P8

P11

P1 P4

P2

P7

P3

P6

P5

VD(S  L) VD(S  R)

P12

P13

P9

P10P8

P11

a4

a3

a2

a1

 HP

Page 19: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 19/38

  La estrategia divide-y-vencerás 137

Después de eliminar todos los segmentos de VD(S  L) a la derecha de HP y todos lossegmentos de VD(S  R) a la izquierda de HP, se obtiene el diagrama de Voronoi resultan-te que se muestra en la figura 4-19.

Sean Hull (S  L) y Hull (S  R) denotados los convex hull de S  L y S  R respectivamente.Existen dos segmentos de línea entre S  L y S  R que unen el Hull(S  L) y el Hull(S  R) en unconvex hull. Sea

Pa

Pb el segmento superior, donde Pa y Pb pertenecen a S  L y S  R respecti-vamente. El primer paso para la construcción de HP es encontrar Pa y Pb. Se seleccionande P6 y P9. Luego se traza una bisectriz perpendicular de la recta

P6—

P9. Éste es el seg-mento inicial de HP. Luego, como se muestra en la figura 4-18, en a1, HP se corta con labisectriz de la recta

P9—

P8. Así, se sabe que el lugar geométrico estará más cercano a P8 que a P9. En otras palabras, el siguiente segmento es una bisectriz de

P6—

P8.Desplazándose hacia abajo, HP corta a VD(S  L) en a2. El segmento de VD(S  L) que

corta a HP es la bisectriz de—

P6—

P7. Así, el nuevo segmento es la bisectriz de—

P7—

P8.A continuación, el proceso de construcción de un diagrama de Voronoi se ilustrará

con otro ejemplo. Considere los seis puntos en la figura 4-20.

En la figura 4-20 se muestran dos diagramas de Voronoi construidos para {P1, P2, P3}y {P4,P5,P6}, respectivamente, donde se han identificado todos los trazos. Por ejem-plo, b13 es la bisectriz perpendicular de la recta

P1—

P3. El proceso de construcción deun diagrama de Voronoi requiere la construcción de conjuntos convexos. Los dos con- juntos convexos se muestran en la figura 4-20. Ambos son triángulos. Después de quese construyen los dos conjuntos convexos, se concluye que

P1—

P5 y—

P2—

P6 son los dossegmentos que unen los dos conjuntos convexos.

FIGURA 4-19  Diagrama de Voronoi de los puntos en la figura 4-17.

P1 P4

P2

P7

P3

P6

P5

P13

P9

P10P8

P11

a4

a3

a2

a1

P12

VD(S  L) VD(S  R)

Page 20: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 20/38

138  Capítulo  4

Así, el paso de fusión empieza desde que se encuentra la bisectriz perpendicular de—

P1—

P5, como se muestra en la figura 4-21.

FIGURA 4-20  Otro caso que ilustra la construcción de diagramasde Voronoi.

P1

P3

P2

b13

b12

b23

P4

P5

P6

b45

b46

b56

FIGURA 4-21  Paso de fusión en la construcción de un diagramade Voronoi.

P1

P3

P4

P6

P2

b

c

e

 f 

b26

b35b23

b46

b56b45

b34

b13

b12

b14

b15

a

P5

Page 21: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 21/38

  La estrategia divide-y-vencerás 139

Todo el paso de fusión consta de los pasos siguientes:

1. La bisectriz perpendicular de—

P1—

P5 corta a b45 en b. Luego se encuentra la bisectrizperpendicular de

P1—

P4. Esta recta se identifica como b14.2. b14 corta a b13 en c. La siguiente bisectriz perpendicular de

P3—

P4 es b34.3. b34 corta a b46 en d . La siguiente bisectriz perpendicular de

P3—

P6 es b36.4. b36 corta a b23 en e. La siguiente bisectriz perpendicular de

P2—

P6 es b26.

Debido a que P2 y P6 son los puntos más bajos de los dos conjuntos convexos, eltrazo b26 se extiende al infinito y entonces se encuentra el hiperplano lineal por partesdivisorio HP. Así, HP está definido por

ab,—

bc,—

cd ,—

de  y—ef . Si un punto cae a la

derecha (izquierda) de este  HP, entonces su vecino más cercano debe ser uno de{P4,P5, P6}({P1,P2,P3}).

En la figura 4-21 se muestran todas las rectas cuyas bisectrices perpendicularesconstituyen el hiperplano divisorio. Estas rectas se identifican como rectas disconti-nuas. Estos segmentos de recta son

P5—

P1,—

P1—

P4,—

P4—

P3,—

P3—

P6 y—

P6—

P2.En el paso de fusión, la última parte es la eliminación de todos los VD(S  L) (VD(S  R))

que se extiendan a la derecha (izquierda) de HP. El diagrama de Voronoi resultante semuestra en la figura 4-22.

FIGURA 4-22  Diagrama de Voronoi resultante.

P4

P5

P6

P3

P1

P2

Page 22: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 22/38

140  Capítulo  4

A continuación se presenta el algoritmo para fusionar dos diagramas de Voronoi.

Algoritmo 4-5 ▫  Algoritmo que fusiona dos diagramas de Voronoi

en un diagrama de VoronoiInput: a) S  L y S  R, donde S  L y S  R están divididos por una recta perpendicular L.

b) VD(S  L) y VD(S  R).Output:  VD(S ), donde S   S  L U S  R.Paso 1. Buscar los conjuntos convexos de S  L y S  R, que se denotan por Hull(S  L) y

Hull(S  R), respectivamente. (Después se proporcionará un algoritmo paraencontrar un convex hull en este caso.)

Paso 2.  Buscar los segmentos—

Pa

Pb y—

Pc

Pd  que unen a Hull(S  L) y Hull(S  R) en unconvex hull (Pa y Pc pertenecen a S  L, y Pb y Pd  pertenecen a S  R). Supon-

ga que

Pa

Pb está por arriba de

Pc

Pd . Hacer  x  

 a, y 

 b, SG 

 

P x 

P y y HP   .Paso 3.  Buscar la bisectriz perpendicular de SG, que se denota por  BS . Hacer

 HP   HP U  BS . Si SG  —

Pc

Pd , ir a paso 5; en caso contrario, ir a paso 4.Paso 4. Se deja que BS  corte primero un trazo desde VD(S  L) o VD(S  R). Este trazo

debe ser una bisectriz perpendicular de—

P x 

P z o—

P y

P z para alguna z. Si estetrazo es la bisectriz perpendicular de

P y

P z, entonces hacer SG  —

P x 

P z; encaso contrario, hacer SG  

P z

P y. Ir a paso 3.Paso 5. Se eliminan los bordes de VD(S  L) que se extienden a la derecha de  HP y

los bordes de VD(S  R) que se extienden a la izquierda de  HP. La gráfica

resultante es el diagrama de Voronoi de S   S  L U S  R.

A continuación se describirán en detalle las propiedades de  HP, aunque antes sedefine la distancia entre un punto y un conjunto de puntos.

Definición

Dados un punto P y un conjunto S  de puntos P1, P2,…, Pn, sea Pi un vecino máscercano de P. La distancia entre P y S  es la distancia entre P y Pi.

Usando esta definición puede afirmarse lo siguiente: el HP obtenido con el algo-ritmo 4-5 es el lugar geométrico de los puntos que preservan distancias iguales a S  L yS  R. Es decir, para cada punto P en HP, sean Pi y P j un vecino más cercano de S  L y S  R de P, respectivamente. Entonces la distancia entre P y Pi es igual a la distancia entreP y P j.

Page 23: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 23/38

  La estrategia divide-y-vencerás 141

Por ejemplo, considere la figura 4-21. Sea P un punto sobre el segmento de recta—cd . Para S  L, el vecino más cercano de P es P3 y para S  R, el vecino más cercano de P esP4. Debido a que

—cd  es la bisectriz perpendicular de

P3—

P4, cada punto en—cd  es equidis-

tante a P3 y P

4. Así, para cada punto en

—cd , está a la misma distancia de S 

 L y S 

 R.

Al usar la propiedad anterior de  HP, fácilmente se observa que toda recta hori-

 zontal H corta a HP por lo menos una vez. Este hecho puede verse fácilmente si seconsidera la figura 4-23.

Imagine que se efectúa un desplazamiento de izquierda a derecha sobre la recta H .Al principio, para un punto como P1, el vecino más cercano de P1 debe ser un miembrode S  L. Imagine también que se efectúa un desplazamiento de derecha a izquierda. Paraun punto como P2, el vecino más cercano de P2 debe ser un miembro de S  R. Debidoa que H  es una recta contigua, debe haber un punto P tal que a la izquierda (derecha)de P cada punto tenga como su vecino más cercano a un elemento de S  L(S  R). Así, P es

equidistante a S  L y S  R. O bien, la distancia entre P y su vecino más cercano en S  L debe

ser igual a la distancia entre P y su vecino más cercano en S  R. Debido a que HP es ellugar geométrico de los puntos equidistantes a S  L y S  R, este punto P también debe estaren HP. Así, se ha demostrado que toda recta horizontal debe cortar a HP por lo menos

una vez. El lector debe consultar la figura 4-21 para convencerse de la validez de laobservación anterior.Al considerar la figura 4-21 se observa que HP posee otra propiedad interesante;

es monótono en y. A continuación se demostrará que toda recta horizontal H corta a

 HP cuando mucho una vez.Suponga lo contrario. Entonces hay un punto Pr  donde HP gira hacia arriba, como

se muestra en la figura 4-24.

FIGURA 4-23  Relación entre una recta horizontal H  y S  L y S  R.

PP1 P2

vecino más cercanoS  L

vecino más cercanoS  R

S  L S  R

ε ε 

 H 

Page 24: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 24/38

142  Capítulo  4

En la figura 4-24,—Pt —Pr   es la bisectriz perpendicular de—ab y —Pt 

—Pr  es la bisectrizperpendicular de

—bc. Debido a que HP es el lugar geométrico que separa S  L y S  R, ocurre

una de dos, que a y c pertenecen a S  L y b pertenece a S  R o que a y c pertenecen a S  R yb pertenece a S  L. Ambas situaciones son imposibles porque se tiene una recta perpen-dicular al eje x  para dividir a S  en S  L y S  R. Es decir, Pr  no puede existir.

Debido a que toda recta horizontal  H  corta a HP por lo menos una vez y cuandomucho una vez, se concluye que toda recta horizontal H corta a HP en uno y sólo en

un punto. Es decir, HP es monótono en y.Hay otra propiedad importante de los diagramas de Voronoi que es útil para dedu-

cir la complejidad temporal del algoritmo para construir un diagrama de Voronoi. Estapropiedad es: el número de bordes de un diagrama de Voronoi es cuando mucho 3n  6,

donde n es el número de puntos. Observe que cada diagrama de Voronoi correspondea una triangulación Delaunay. Debido a que una triangulación Delaunay es una gráficaplana, puede contener cuando mucho 3n  6 bordes. Como hay una correspondenciauno a uno entre los bordes en el diagrama de Voronoi y los bordes en la triangulaciónDelaunay, el número de bordes en un diagrama de Voronoi es cuando mucho 3n  6.

Una vez que se ha obtenido la cota superior de los bordes de Voronoi, a continua-ción es posible deducir la cota superior de los vértices de Voronoi. Observe que cada

vértice de Voronoi corresponde a un triángulo en la triangulación Delaunay. Debido aque una triangulación Delaunay es una gráfica plana, una triangulación puede conside-rarse como una cara de esta gráfica plana. Sean F , E  y V  el número de caras, bordes yvértices de la triangulación Delaunay. Entonces, según la relación de Euler, F    E   V   2. En una triangulación Delaunay, V   n y E  es cuando mucho 3n  6. En conse-cuencia, F  es a lo sumo (3n  6)  n  2  2n  4. Es decir, el número de vértices de

Voronoi es cuando mucho 2n  4.

FIGURA 4-24  Ilustración de la monotonía de HP.

b

c

a

HP

S  L S  RPt 

Pr 

Ps

Page 25: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 25/38

  La estrategia divide-y-vencerás 143

Ya casi es posible deducir la complejidad temporal del proceso de fusión. Recuer-de que en este proceso es necesario encontrar dos conjuntos convexos. El algoritmoque se presentó en el apartado 4-3 no puede aplicarse aquí porque su complejidadtemporal es O(n log n), que es demasiado alta para nuestros fines. A continuación sedemostrará que estos conjuntos convexos pueden encontrarse fácilmente, ya que paraconstruir estos conjuntos convexos es posible usar VD(S  L) y VD(S  R).

Considere la figura 4-25 que muestra un diagrama de Voronoi con cuatro trazosinfinitos; a saber, b12, b15, b56 y b26. Los puntos asociados con estos trazos infinitosson P2, P1, P5 y P6. De hecho, ahora es posible construir el convex hull uniendo estospuntos, lo cual se muestra con las líneas discontinuas en la figura 4-25.

Después de que se ha elaborado un diagrama de Voronoi, el convex hull puedeconstruirse al analizar todos los bordes de Voronoi hasta que se encuentra un trazo

infinito. Sea Pi el punto a la izquierda de este trazo infinito. Entonces Pi es el vértice deun convex hull. A continuación se analizan los bordes de Voronoi del polígono de Vo-ronoi de Pi hasta que se encuentra un trazo infinito. El proceso anterior se repite hastaque se regresa al trazo inicial. Debido a que cada borde aparece en exactamente dospolígonos de Voronoi, ningún borde se examina más de dos veces.  En consecuencia,

una vez que se construye un diagrama de Voronoi, es posible encontrar un convex hull

en tiempo O(n).

FIGURA 4-25  Construcción de un convex hull a partir de un diagrama de Voronoi.

P4

P5

P6

P3

P1

P2

b15

b14

b13

b

12

b23

b26

b36

b46

b45 b56

b34

Page 26: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 26/38

144  Capítulo  4

A continuación se deduce la complejidad temporal del paso de fusión del algoritmopara construir un diagrama de Voronoi con base en la estrategia divide-y-vencerás:

1. Los conjuntos convexos pueden encontrarse en tiempo O(n) porque VD(S  L

) yVD(S  R) ya se han construido y es posible encontrar un convex hull si se encuentranlos trazos infinitos.

2. Los bordes que unen dos conjuntos convexos para formar un nuevo convex hullpueden determinarse en tiempo O(n). Esto se explicó en el apartado 4-3.

3. Debido a que en VD(S  L) y VD(S  R) hay a lo sumo 3n – 6 bordes y a que HP contienea lo sumo n segmentos (debido a que  HP es monótono en y), todo el proceso deconstrucción de HP requiere cuando mucho O(n) pasos.

Así, el proceso de fusión del algoritmo de construcción del diagrama de Voronoi

es O(n). Por tanto,

T (n)  2T (n /2) O(n)

 O(n logn).

Se concluye que la complejidad temporal del algoritmo divide-y-vencerás para

construir un diagrama de Voronoi es O(n  log n). A continuación se demostrará queéste es un algoritmo óptimo. Considere un conjunto de puntos en una recta. El dia-grama de Voronoi de este conjunto de puntos consta de un conjunto de rectas bi-

sectrices, como se muestra en la figura 4-26. Después que se han construido estasrectas, una exploración lineal de estos bordes de Voronoi lleva a cabo la función deordenamiento. En otras palabras, el problema del diagrama de Voronoi no puede ser

más sencillo que el problema de ordenamiento. En consecuencia, una cota inferior delproblema del diagrama de Voronoi es (n logn) y así se concluye que el algoritmo esóptimo.

FIGURA 4-26  Diagrama de Voronoi para un conjunto de puntosen una recta.

P1 P2 P3 P4 P5

b45b34b23b12

Page 27: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 27/38

  La estrategia divide-y-vencerás 145

4-5 Aplicaciones de los diagramas de Voronoi

Se ha analizado el concepto de diagramas de Voronoi y se ha demostrado cómo usar laestrategia divide-y-vencerás para construir un diagrama de Voronoi. En este apartado

se demostrará que los diagramas de Voronoi poseen muchas aplicaciones interesantes.Estas aplicaciones, por supuesto, no guardan ninguna relación con la estrategia divi-de-y-vencerás. Mediante la presentación de aplicaciones de los diagramas de Voronoiesperamos estimular el interés del lector en la geometría computacional.

El problema euclidiano de búsqueda del vecino más cercano

La primera aplicación consiste en resolver el problema euclidiano de búsqueda delvecino más cercano, que se define como sigue: se tienen un conjunto con n puntos pla-

nos: P1 , P2 ,…, Pn  y un punto de prueba P. El problema consiste en encontrar un vecino

más cercano de P de entre los Pi y la distancia que se utiliza es la distancia euclidiana.

Un método directo para resolver este problema consiste en aplicar una búsquedaexhaustiva. Este algoritmo podría ser un algoritmo O(n). Al usar el diagrama de Voro-noi, el tiempo de búsqueda puede reducirse a O(log n) con tiempo de procesamientoprevio O(n log n).

Es posible usar el diagrama de Voronoi para resolver el problema euclidiano debúsqueda del vecino más cercano debido a las propiedades fundamentales de losdiagramas de Voronoi. Observe que el diagrama de Voronoi divide todo el plano enregiones R1, R2,…, Rn. Dentro de cada región Ri hay un punto Pi. Si un punto de pruebacae dentro de la región Ri, entonces su vecino más cercano, de entre todos los puntos,

es Pi. En consecuencia, una búsqueda exhaustiva podría evitarse transformando sim-plemente el problema en un problema de localización de una región. Es decir, si esposible determinar la región Ri en que se encuentra un punto de prueba, entonces sepuede determinar un vecino más cercano de este punto de prueba.

Un diagrama de Voronoi es una gráfica plana. En consecuencia, es posible usar laspropiedades especiales de una gráfica plana como se ilustra en la figura 4-27. En estafigura se ha vuelto a trazar el diagrama de Voronoi de la figura 4-22. Observe que hayseis vértices de Voronoi. El primer paso es ordenar estos vértices según sus valores y.Así, como se muestra en la figura 4-27, los vértices de Voronoi se identifican comoV 1, V 2,…, V 6 según sus valores decrecientes y. Para cada vértice de Voronoi se traza

una recta horizontal que pase por este vértice. Tales rectas horizontales dividen todo elespacio en franjas, como se muestra en la figura 4-27.

Dentro de cada franja hay vértices de Voronoi que pueden ordenarse linealmente,que dividen nuevamente cada franja en regiones. Considere SL5 en la figura 4-27. Dentrode SL5 hay tres vértices de Voronoi: b23, b34 y b46. Estos vértices pueden ordenarse como

b23  b34  b46.

Page 28: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 28/38

146  Capítulo  4

Estos tres bordes dividen la franja en cuatro regiones:  R2, R3, R4 y R6. Si entre losbordes b23 y b34 se encuentra un punto, debe estar en R3. Si se encuentra a la derechade b46, debe estar dentro de la región R6. Debido a que estos bordes están ordenados, esposible usar una búsqueda binaria para determinar la ubicación de un punto de prueba

en tanto concierna a los bordes de Voronoi.Esencialmente, el algoritmo euclidiano de búsqueda del vecino más cercano cons-

ta de dos pasos fundamentales:

1. Efectuar una búsqueda binaria para determinar la franja en que se encuentra elpunto de prueba. Debido a que cuando mucho hay O(n) vértices de Voronoi, labúsqueda puede hacerse en tiempo O(log n).

2. Dentro de cada franja, realizar una búsqueda binaria para determinar la región enque se encuentra este punto. Debido a que cuando mucho hay O(n) vértices de

Voronoi, esta búsqueda puede hacerse en tiempoO

(logn).

El tiempo total de búsqueda es O(log n). Resulta fácil darse cuenta de que el tiem-po de procesamiento previo es O(n log n), que esencialmente es el tiempo necesariopara construir el diagrama de Voronoi.

FIGURA 4-27  Aplicación de los diagramas de Voronoi para resolver el problemaeuclidiano de búsqueda del vecino más cercano.

SL1

SL2

SL3

SL4

SL5

SL6

SL7

P1

P3

P4

P5

P2

P6

 R1

 R5

 R4

 R3  R6

 R2

b26

b36

b23

v6

v5

v3

v4

v2

v1

b45 b56

b15

b14

b13

b12

b34 b46

b12 < b23 < b34 < b46

b23 < b36

Page 29: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 29/38

  La estrategia divide-y-vencerás 147

El problema euclidiano de todos los vecinos más cercanos

La siguiente aplicación es resolver el problema euclidiano de todos los vecinos máscercanos. Se tiene un conjunto con n puntos planos: P1, P2,…, Pn. El problema eucli-

diano del par más cercano consiste en encontrar un vecino más cercano de todo Pi.Este problema puede resolverse fácilmente usando el diagrama de Voronoi debido ala siguiente propiedad de los diagramas de Voronoi. Si P es un vecino más cercano de

Pi, entonces Pi y P j comparten el mismo borde de Voronoi. Además, el punto medio

de—

Pi

—P j  está ubicado exactamente en este borde de Voronoi compartido comúnmente.

Demostraremos esta propiedad por contradicción. Suponga que Pi y P j no compartenel mismo borde de Voronoi. Por la definición de polígonos de Voronoi, la bisectrizperpendicular de 

Pi

—P j debe estar fuera del polígono de Voronoi asociado con Pi. Sea

Pi

—P j que corta a la bisectriz en M  y a algún borde de Voronoi en N , como se ilustra en

la figura 4-28.

Suponga que el borde de Voronoi está entre Pi y Pk  y que —

Pi

—Pk  corta al borde de

Voronoi en L. Entonces se tiene

 —

Pi

— N  —

Pi

— M  

y—

Pi

— L  —

Pi

— N .

Esto significa que

 —

Pi

Pk   2—

Pi

— L  2

Pi

— N   2—

Pi

— M   —

Pi

—P j .

Lo anterior es imposible porque P j es un vecino más cercano de Pi.Dada la propiedad anterior, el problema euclidiano de todos los vecinos más cer-

canos puede resolverse analizando todos los bordes de Voronoi de cada polígono de

FIGURA 4-28  Ilustración de la propiedad del vecino más cercanode los diagramas de Voronoi.

P j Pi

Pk 

 M 

 N 

 L

Page 30: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 30/38

148  Capítulo  4

Voronoi. Debido a que cada borde de Voronoi es compartido exactamente por dospolígonos de Voronoi, ningún borde de Voronoi se analiza dos veces. Es decir, esteproblema euclidiano de todos los vecinos más cercanos puede resolverse en tiempolineal una vez que se ha construido el diagrama de Voronoi. Así, este problema puederesolverse en tiempo O(n log n).

En la figura 4-29 se ha vuelto a trazar la figura 4-22. Para P4, es necesario analizarcuatro bordes y se encontrará que el vecino más cercano de P4 es P3.

4-6  La transformada rápida de Fourier

El problema de la transformada rápida de Fourier consiste en resolver lo siguiente:

donde i 1  y a0, a1,…, an1 son números dados. Un método directo requiere O(n2)

pasos. Si se aplica la estrategia divide-y-vencerás, la complejidad temporal puede re-ducirse a O(n log n).

FIGURA 4-29  La relación de todos los vecinos más cercanos.

P4

P5

P6

P3

P1

P2

Una flecha de P j a Pi indica que

 P j es un vecino más cercano de Pi 

 A a e j n j   k 

ijk 

n

n

  2

0

10 1

 

,∑   ≤ ≤

Page 31: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 31/38

  La estrategia divide-y-vencerás 149

Para simplificar el análisis, sea 

w en

i

n

. Así, la transformada de Fourier es paracalcular lo siguiente:

Sea n  4. Así, se tiene

Las ecuaciones anteriores pueden volverse a agrupar como se muestra a continua-ción:

Debido a que wn

2

wn /2  y wn

nk 

wn

, se tiene

Sea

 A j a0 a1wn j a2wn2 j L an1wn(n

1) j.

 A0 a0 a1 a2 a3

 A1 a0 a1w4 a2w42

a3w43

 A2 a0 a1w42

a2w44

a3w46

 A3 a0 a1w43

a2w46

a3w49.

 A0 (a0 a2) (a1 a3)

 A1 (a0 a2w42) w4(a1 a3w4

2)

 A2 (a0 a2w44) w4

2(a1 a3w44)

 A3 (a0 a2w46) w4

3(a1 a3w46)

 A0 (a0 a2) (a1 a3)

 A1 (a0 a2w2) w4(a1 a3w2)

 A2 (a0 a2) w42(a1 a3)

 A3 (a0 a2w42) w4

3(a1 a3w42)

(a0 a2w2) w43(a1 a3w2).

 B0 a0 a2

C 0 a1 a3

 B1 a0 a2w2

C 1 a1 a3w2.

Page 32: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 32/38

150  Capítulo  4

Entonces

La ecuación anterior muestra que la estrategia divide-y-vencerás puede aplicarseelegantemente para resolver el problema de la transformada de Fourier. Basta calcular B0, C 0, B1 y C 1. Las A j pueden calcularse fácilmente. En otras palabras, una vez quese obtiene A0, A2 puede obtenerse de inmediato. De manera semejante, una vez que seobtiene A1, A3 puede obtenerse directamente.

Pero, ¿qué ocurre con las Bi y con las C i? Observe que las Bi son la transformadade Fourier de los datos de entrada con número impar, y que las C i representan la trans-formada de Fourier de los datos de entrada con número par. Esto constituye la basede la aplicación de la estrategia divide-y-vencerás al problema de la transformada deFourier. Un problema grande se divide en dos subproblemas, que se resuelven de ma-nera recursiva y luego se fusionan las soluciones.

Considere A j en el caso general.

 B j y C  j se definen como sigue:

Entonces

 A0  B0 w40C 0

 A1

 B1

w4

1

C 1 A2  B0 w4

2C 0

 A3  B1 w43C 1.

  A j  a0 a1wn j

a2wn2 j

L an1wn(n1) j

(a0 a2wn2 j

a4wn4 j

L an2wn(n2) j)

wn j(a1 a3wn2 j a5wn4 j L an1wn(n2) j)

(a0 a2w jn /2 a4w

2 jn /2 L an2 

wn

n j

 / 

( )

2

2

2

)

wn j(a1 a3w

 jn /2 a5w

2 jn /2 L an1 

wn

n j

 / 

( )

2

2

2

).

and B j

a0

a2

w j

n /2

a4

w2 j

n /2

L an

wn

n j

 / 

( )

2

2

2

y C  j a1 a3w jn /2 a5w

2 jn /2 L an1 

wn

n j

 / 

( )

2

2

2

.

 A j  B j wn jC  j.

Page 33: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 33/38

  La estrategia divide-y-vencerás 151

También puede demostrarse que

 A jn /2   B j  wn jn /2C  j.

Para n  2, la transformada de Fourier es como sigue:

 A0  a0  a1

   A1  a0  a1.

A continuación se presenta el algoritmo de la transformada rápida de Fourier basa-do en el método divide-y-vencerás:

Algoritmo 4-6 ▫ Un algoritmo de la transformada rápida de Fourier

basado en la estrategia divide-y-vencerás

Input:  a0, a1,K, an1, n  2k .

Output:  A a e j k 

ijk 

n

n

2

0

1  

∑ para  j 0, 1, 2,K , n 1.

Paso 1. Si n  2,

   A0  a0  a1

   A1  a0  a1

  Return.Paso 2. Recursivamente buscar los coeficientes de la transformada de Fourier de

a0, a2,K, an2(a1,K, an1). Los coeficientes se denotan por  B0,  B1,K, Bn /2(C 0, C 1,K, C n /2).

Paso 3.  Para  j 0 hasta  j   n

2 1

   A j   B j  wn jC  j

   A jn /2   B j  wn jn /2C  j.

Resulta evidente que la complejidad temporal del algoritmo anterior es O(n log n).Hay una transformada inversa de Fourier que transforma A0, A1,K, An1 de vuelta ena0, a1,K, an1 como sigue:

 

an

 A e j   k 

ijk 

n

n

1  2

0

∑ para  j 0, 1, 2,K, n 1.

Page 34: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 34/38

152  Capítulo  4

Se considerará un ejemplo. Sean a0  1, a1  0, a2  1, a3  0. Entonces

Así,

Debe ser fácil ver que la transformada inversa de Fourier debe transformar correc-tamente las Ai de vuelta en las ai.

4-7  Los resultados experimentales

Para demostrar que la estrategia divide-y-vencerás es útil, se implementó el algoritmodel par más cercano basado en los algoritmos divide-y-vencerás, y el algoritmo decomparación directa que examina exhaustivamente cada par de puntos. Ambos pro-gramas se implementaron en una computadora personal IBM. Los resultados experi-

mentales se resumen en la figura 4-30. Como se muestra en esa figura, mientras n espequeña el método directo se desempeña mejor. No obstante, a medida que n se hacegrande, el algoritmo divide-y-vencerás es mucho más rápido. Por ejemplo, cuando n esigual a 7 000, el algoritmo divide-y-vencerás es casi 200 veces más rápido que el mé-todo directo. Los resultados son bastante predecibles porque la complejidad temporaldel método directo es O(n2) y la complejidad temporal del algoritmo divide-y-venceráses O(n log n).

 B0 a0 a2 1 (1) 0

 B1 a0 a2 1 (1) 2C 0 a1 a3 0 0 0

C 1 a1 a3 0 0 0

w4  e

i2

4

 

i

w42

1

w43

i.

 A0  B0 w40C 0  B0 C 0 0 0 0

 A1  B1 w4C 1 2 0 2

 A2  B0 w42C 0 0 0 0

 A3  B1 w43C 1 2 0 2.

Page 35: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 35/38

  La estrategia divide-y-vencerás 153

4-8  Notas y referencias

La estrategia divide-y-vencerás suele aplicarse para resolver problemas de geometríacomputacional. Consulte a Preparata y Shamos (1985) y a Lee y Preparata (1984). Laestrategia divide-y-vencerás también se analiza en Horowitz y Sahni (1978) y en Aho,Hopcroft y Ullman (1974).

Para un análisis completo del problema de máximos, consulte a Pohl (1972). Elproblema del par más cercano y el problema de cómo encontrar los máximos fueronresueltos por Bentley (1980).

Los diagramas de Voronoi fueron estudiados primero por Voronoi (1908). De nue-vo, más información sobre los diagramas de Voronoi puede consultarse en Preparatay Shamos (1985). Para una generalización de los diagramas de Voronoi a órdenes ydimensiones superiores, consulte las obras de Lee (1982) y Brown (1979).

FIGURA 4-30  Resultados experimentales del problemade encontrar el par más cercano.

40 000 –

35 000 –

30 000 –

25 000 –

20 000 –

15 000 –

10 000 –

5 000 –

0 –

TiempodeCPU(msg)

0 50 100 150 200 250 300 350 400

 Número de puntos

comparación directa

divide-y-vencerás

Page 36: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 36/38

154  Capítulo  4

En Levcopoulos y Lingas (1987) y Preparata y Shamos (1985) pueden encontrarsediferentes algoritmos de conjuntos convexos. El algoritmo de Graham fue propuestopor Graham (1972). Aplicando la estrategia divide-y-vencerás también puede encon-trarse un convex hull tridimensional. Esto fue indicado por Preparata y Hong (1977).

El hecho de que la transformada de Fourier puede resolverse con el método de di-vide-y-vencerás fue señalado por Cooley y Tukey (1965). Gentleman y Sande (1966)analizan aplicaciones de la transformada rápida de Fourier. El libro de Brigham (Brig-ham, 1974) está dedicado totalmente a la transformada rápida de Fourier.

La estrategia divide-y-vencerás puede aplicarse para obtener un algoritmo eficien-te de multiplicación matricial. Consulte la obra de Strassen (1969).

4-9  Bibliografía adicional

La estrategia divide-y-vencerás sigue siendo un tema interesante para muchos inves-tigadores. Es especialmente eficaz para geometría computacional. Para investigaciónadicional, se recomiendan los siguientes artículos: Aleksandrov y Djidjev (1996); Ben-tley (1980); Bentley y Shamos (1978); Blankenagel y Gueting (1990); Bossi, Coc-co y Colussi (1983); Chazelle, Drysdale y Lee (1986); Dwyer (1987); Edelsbrunner,Maurer, Preparata, Rosenberg, Welzl y Wood (1982); Gilbert, Hutchinson y Tarjan(1984); Gueting (1984); Gueting y Schilling (1987); Karp (1994); Kumar, Kiran yPandu (1987); Lopez y Zapata (1994); Monier (1980); Oishi y Sugihara (1995);Reingold y Supowit (1983); Sykora y Vrto (1993); Veroy (1988); Walsh (1984), y Yeny Kuo (1997).

Para algunos artículos bastante interesantes y de reciente publicación, consulteAbel (1990); Derfel y Vogl (2000); Dietterich (2000); Even, Naor, Rao y Schieber(2000); Fu (2001); Kamidoi, Wakabayashi y Yoshida (2002); Lee y Sheu (1992); Liu(2002); Lo, Rajopadhye, Telle y Zhong (1996); Melnik y Garcia-Molina (2002); Mes-singer, Rowe y Henry (1991); Neogi y Saha (1995); Rosler (2001); Rosler y Ruschen-dorf (2001); Roura (2001); Tisseur y Dongarra (1999); Tsai y Katsaggelos (1999); Ver-ma (1997); Wang (1997); Wang (2000); Wang, He, Tang y Wee (2003); Yagle (1998),y Yoo, Smith y Gopalarkishnan (1997).

Page 37: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 37/38

  La estrategia divide-y-vencerás 155

4.1 La búsqueda binaria, ¿usa la estrategia divide-y-vencerás?4.2 Para multiplicar directamente dos números de n bits u y v se requieren

O(n2) pasos. Al aplicar el método divide-y-vencerás, el número puedesepararse en dos partes iguales y calcular el producto aplicando el métodosiguiente:

Si ad   bc se calcula como (a  b) (c  d ) – ac – bd , ¿cuál es el tiempo

de cálculo?4.3 Demuestre que en quick sort, la pila máxima necesaria es O(log n).

4.4 Implemente el algoritmo de la transformada rápida de Fourier con base enel método divide-y-vencerás. Compárelo con el método directo.

4.5 Implemente el algoritmo para encontrar rangos con base en el métododivide-y-vencerás. Compárelo con el método directo.

4.6 Sea T 

nr 

2

2

  

     nT (n) bn2, donde r  es un entero y r   1. Encuentre T (n).

4.7 Lea la sección 3-7 del libro de Horowitz y Sahni (1978) para conocer elmétodo de multiplicación matricial de Strassen con base en el algoritmodivide-y-vencerás.

4.8 Sea

donde a, b y c son constantes no negativas.

Demuestre que si n es una potencia de c, entonces

Ejercicios 

uv (a · 2n /2 b) · (c · 2n /2

d ) ac · 2n (ad  bc) · 2n /2

bd .

T nb n

aT n c bn n( )

( / )

para

para

1

1

T n

O n a c

O n n a c

O n a c

a

ac

( )

( )

( log )

( ) .log

si

si

si

Page 38: Lee Algoritmos Capitulo Muestra c04

8/18/2019 Lee Algoritmos Capitulo Muestra c04

http://slidepdf.com/reader/full/lee-algoritmos-capitulo-muestra-c04 38/38

156  Capítulo  4

4.9 Demuestre que si T (n) mT (n /2) an2, entonces T (n) es satisfecho por

4.10 Una clase muy especial de algoritmo de ordenamiento, basado también enel algoritmo divide-y-vencerás, es el ordenamiento de fusión impar-par(odd-even merge sorting), inventado por Batcher (1968). Lea la sección7.4 del libro de Liu (1977) para conocer este algoritmo de ordenamiento.Este algoritmo, ¿es idóneo como algoritmo secuencial? ¿Por qué? (Éste

es un famoso algoritmo de ordenamiento paralelo.)4.11 Diseñe un algoritmo con tiempo O(n log n) para encontrar la subsecuenciamonótona creciente más larga de una secuencia de n números.

T nO n mO n n m

O n m

m

( )( )( log )

( ) .

log

sisi

si

44

4

2

2