dra. elisa schaeffer · guardamos en un árbol binario balanceado los segmentos que quedan...

38
Técnicas de diseño de algoritmos Algoritmos de línea de barrer Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL ınea de barrer– p. 1

Upload: others

Post on 23-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Técnicas de diseño de algoritmos

Algoritmos de línea de barrer

Dra. Elisa Schaeffer

[email protected]

PISIS / FIME / UANL

Lınea de barrer– p. 1

Page 2: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Algoritmos de línea de barrer

Los algoritmos de l ınea de barrer (inglés: sweep line oscan line) dividen el problema en partes que se puedeprocesar en secuencia.

Son particularmente comúnes para los problemas degeometrıa computacional, donde se procesa objetosgeométricos como apuntos, líneas, polígonos, etcétera.

La instancia del problema está compuesta por lainformación de la ubicación de los objetos en un espaciodefinido.

Lınea de barrer– p. 2

Page 3: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Intuición en plano

Para el caso que es espacio sea un plano, se puedeimaginar que una línea mueva en el plano, cruzando laparte relevante del espacio donde se ubican los objetos.

El movimiento de la línea sigue uno de los ejes u otra líneafija y la línea se para en puntos relevantes al problema.

Los puntos de parada se guarda en un montıculo. Lainicialización del montículo y su actualización son asuntosimportantes en el diseño del algoritmo.

Lınea de barrer– p. 3

Page 4: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Información auxiliar

También se puede aprovechar de otras estructuras dedatos auxiliares, por ejemplo para guardar informaciónsobre cuáles objetos están actualmente bajo de lalınea.

Entre dos paradas de la línea, los papeles relativos de losobjetos pueden cambiar, pero los factores esenciales de lasolución del problema no deben cambiar de una parada aotra.

Lınea de barrer– p. 4

Page 5: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Otras dimensionalidades

Si el espacio tiene una sola dimensión, en vez de unalínea basta con usar un punto. Para dimensiones mayoresn, se “barre” con un hiperplano de dimensión n− 1.

Lınea de barrer– p. 5

Page 6: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Intersecciones de segmentos

Dado: n segmentos de líneas en plano de dosdimensiones

Pregunta: ¿Cuáles son los puntos de intersección entretodos los segmentos?

Lınea de barrer– p. 6

Page 7: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Ejemplo

Lınea de barrer– p. 7

Page 8: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Algoritmo ingenuo

Procesar cada uno de los n(n− 1) = Θ (n2) pares desegmentos si ∈ S y sj ∈ S tal que i 6= j y computa suintersección.

El el peor caso, esto es el comportamiento óptimo: si todoslos segmentos se intersectan, habrá que calcular todas lasintersecciones en cualquier caso y solamente imprimir lalista de las instrucciones ya toma Θ(n2) tiempo.

Lınea de barrer– p. 8

Page 9: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Instancias típicas

Sin embargo, en una instancia promedia o típica, elnúmero de puntos de intersección k es mucho menor quen(n− 1).

El algoritmo mejor imaginable tuviera complejidadasintótica O (n+ k), porque se necesita tiempo O (n) paraleer la entrada y tiempo O (k) para imprimir la salida.

Ahora veremos un algoritmo de línea de barrer que correen tiempo O ((n+ k) log n).

Lınea de barrer– p. 9

Page 10: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

El algoritmo

Los puntos de paradaserán todos los puntos dondeempiezao termina un segmento y además lospuntos de interseccion.

Lınea de barrer– p. 10

Page 11: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

El algoritmo

Los puntos de paradaserán todos los puntos dondeempiezao termina un segmento y además lospuntos de interseccion.

Son n puntos de comienzo, n puntos finalesy k

intersecciones.

Lınea de barrer– p. 10

Page 12: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

El algoritmo

Los puntos de paradaserán todos los puntos dondeempiezao termina un segmento y además lospuntos de interseccion.

Son n puntos de comienzo, n puntos finalesy k

intersecciones.La línea de barrer moverá en perpendicular al ejex, o sea, en paralelo al eje y.

Lınea de barrer– p. 10

Page 13: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

El algoritmo

Los puntos de paradaserán todos los puntos dondeempiezao termina un segmento y además lospuntos de interseccion.

Son n puntos de comienzo, n puntos finalesy k

intersecciones.La línea de barrer moverá en perpendicular al ejex, o sea, en paralelo al eje y.

Se guardará los puntos de parada en un montículo.

Lınea de barrer– p. 10

Page 14: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

El algoritmo

Los puntos de paradaserán todos los puntos dondeempiezao termina un segmento y además lospuntos de interseccion.

Son n puntos de comienzo, n puntos finalesy k

intersecciones.La línea de barrer moverá en perpendicular al ejex, o sea, en paralelo al eje y.

Se guardará los puntos de parada en un montículo.

Las actualizaciones necesarias del montículo tomaránO (log n) tiempo cada una.

Lınea de barrer– p. 10

Page 15: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Observaciones

Entre dos puntos de parada, por definición no hay ningunaintersección.

El subconjunto de segmentos cuales quedan “bajo” de lalínea de barrer, o sea, los segmentos que intersectan conla línea de barrer mientras mueva de un punto de paradaal siguiente no cambia.

El orden de los puntos de intersección en comparación acualquier de los dos ejes está fijo.

Lınea de barrer– p. 11

Page 16: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Ejemplo preprocesado

Lınea de barrer– p. 12

Page 17: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Estructura de segmentos

Guardamos en un árbol binario balanceado los segmentosque quedan actualmente bajo de la línea de barrer.

El árbol nos da acceso en tiempo O (log n).

Se insertarán según el orden de la coordenada y del puntode intersección del segmento con la línea de barrer.

Lınea de barrer– p. 13

Page 18: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Actualización del árbol

(I) cuando comienza un segmento, se inserta elsegmento en el lugar adecuado en el árbol binario

(II) cuando termina un segmento, se saca el segmento delárbol, y

(III) cuando se intersectan dos segmentos, el segmentoque antes estaba arriba se cambia por abajo yviceversa — en este último caso también se imprimeel punto de intersección encontrada a la salida

Lınea de barrer– p. 14

Page 19: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Momento de intersección

Por el hecho que el orden está según la coordenada y,a llegar a la intersección de dos segmentos si y sj, son“vecinos” en el árbol por lo menos justo antes de llegaral punto de intersección.

Lınea de barrer– p. 15

Page 20: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Momento de intersección

Por el hecho que el orden está según la coordenada y,a llegar a la intersección de dos segmentos si y sj, son“vecinos” en el árbol por lo menos justo antes de llegaral punto de intersección.

Ser vecinos quiere decir que son vértices hoja delárbol que están uno al lado del otro en el nivel bajo.

Lınea de barrer– p. 15

Page 21: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Momento de intersección

Por el hecho que el orden está según la coordenada y,a llegar a la intersección de dos segmentos si y sj, son“vecinos” en el árbol por lo menos justo antes de llegaral punto de intersección.

Ser vecinos quiere decir que son vértices hoja delárbol que están uno al lado del otro en el nivel bajo.

=⇒ Al haber actualizado la estructura, lo único quetenemos que hacer es calcular las puntos deintersección de los vecinos actuales y añadirles en lacola de puntos de parada.

Lınea de barrer– p. 15

Page 22: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Momento de intersección

Por el hecho que el orden está según la coordenada y,a llegar a la intersección de dos segmentos si y sj, son“vecinos” en el árbol por lo menos justo antes de llegaral punto de intersección.

Ser vecinos quiere decir que son vértices hoja delárbol que están uno al lado del otro en el nivel bajo.

=⇒ Al haber actualizado la estructura, lo único quetenemos que hacer es calcular las puntos deintersección de los vecinos actuales y añadirles en lacola de puntos de parada.

El número máximo de puntos de parada nuevosencontrados al haber hecho una parada es 2.

Lınea de barrer– p. 15

Page 23: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Pseudocódigo

M := un montículo vacíopara todo si ∈ S,

si =(

(x1, y1), (x2, y2))

tal que x1 ≤ x2

insertar en M el dato [(x1, y1), C, i,−]

insertar en M el dato [(x2, y2), F, i,−]

B := un árbol binario balanceado vacíomientras M no está vacío

(x, y) := el elemento mínimo de M

remueve (x, y) de M

...

Lınea de barrer– p. 16

Page 24: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Pseudocódigo: puntos de inicio

si (x, y) es de tipo C como “comienzo”insertar si a B ordenado según la clave y

si el vecino izquiero de si en B está definido y está sℓ

computar la intersección (x′, y′) de si y sℓ

si x′ > x

insertar en M el dato [(x′, y′), I, ℓ, i]

si el vecino derecho de si en B está definido y está sr

computar la intersección (x′′, y′′) de si y sr

si x′′ > x

insertar en M el dato [(x′′, y′′), I, i, r]

...

Lınea de barrer– p. 17

Page 25: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Pseudocódigo: puntos finales

si (x, y) es de tipo F como “final”sℓ := el segmento a la izquierda de si en B

sr := el segmento a la derecha de si en B

remueve si de B

si están definidos ambos sℓ y sr,computar la intersección (x′, y′) de sℓ y sr

si x′′ > x

insertar en M el dato [(x′, y′), I, ℓ, r]

...

Lınea de barrer– p. 18

Page 26: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Pseudocódigo: intersecciones

si (x, y) es de tipo “intersección”i := el primer índice definido en el datoj := el segundo índice definido en el datointercambia las posiciones de si y sj en B

si el nuevo vecino izq. de sj en B es sℓ

computar la intersección (x′, y′) de sj y sℓ

si x′ > x, insertar en M el dato [(x′, y′), I, j, ℓ]

si el nuevo vecino der. de si en B es sr

computar la intersección (x′′, y′′) de si y sr

si x′′ > x, insertar en M el dato [(x′′, y′′), I, i, r]

imprimir (x, y)

Lınea de barrer– p. 19

Page 27: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

Lınea de barrer– p. 20

Page 28: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

En cada punto preprocesado se realiza una insercióno un retiro de un elemento de un árbol binariobalanceado.

Lınea de barrer– p. 20

Page 29: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

En cada punto preprocesado se realiza una insercióno un retiro de un elemento de un árbol binariobalanceado.

Son en total 2n de tales operaciones.

Lınea de barrer– p. 20

Page 30: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

En cada punto preprocesado se realiza una insercióno un retiro de un elemento de un árbol binariobalanceado.

Son en total 2n de tales operaciones.

Juntas necesitan O (n log n) tiempo.

Lınea de barrer– p. 20

Page 31: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

En cada punto preprocesado se realiza una insercióno un retiro de un elemento de un árbol binariobalanceado.

Son en total 2n de tales operaciones.

Juntas necesitan O (n log n) tiempo.

Se añade máx. 2 elementos por cada inserción y almáximo un elemento por cada retiro.

Lınea de barrer– p. 20

Page 32: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: montículo

La construcción al inicio: O (n)

En cada punto preprocesado se realiza una insercióno un retiro de un elemento de un árbol binariobalanceado.

Son en total 2n de tales operaciones.

Juntas necesitan O (n log n) tiempo.

Se añade máx. 2 elementos por cada inserción y almáximo un elemento por cada retiro.

Cada operación es O (log n) y son O (n) operaciones.

Lınea de barrer– p. 20

Page 33: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: intersecciones

Hasta ahora todo necesita O (n log n) tiempo.

En los puntos de intersección se intercambianposiciones.

Lınea de barrer– p. 21

Page 34: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: intersecciones

Hasta ahora todo necesita O (n log n) tiempo.

En los puntos de intersección se intercambianposiciones.

Implementar con dos retiros seguidos por dosinserciones al árbol, de costo O (log n) cada uno.

Lınea de barrer– p. 21

Page 35: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: intersecciones

Hasta ahora todo necesita O (n log n) tiempo.

En los puntos de intersección se intercambianposiciones.

Implementar con dos retiros seguidos por dosinserciones al árbol, de costo O (log n) cada uno.

Además se inserta al máximo dos puntos al montículo,de costo O (log n) por inserción.

Lınea de barrer– p. 21

Page 36: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: intersecciones

Hasta ahora todo necesita O (n log n) tiempo.

En los puntos de intersección se intercambianposiciones.

Implementar con dos retiros seguidos por dosinserciones al árbol, de costo O (log n) cada uno.

Además se inserta al máximo dos puntos al montículo,de costo O (log n) por inserción.

En total son k intersecciones =⇒ O (k log n).

Lınea de barrer– p. 21

Page 37: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Análisis: intersecciones

Hasta ahora todo necesita O (n log n) tiempo.

En los puntos de intersección se intercambianposiciones.

Implementar con dos retiros seguidos por dosinserciones al árbol, de costo O (log n) cada uno.

Además se inserta al máximo dos puntos al montículo,de costo O (log n) por inserción.

En total son k intersecciones =⇒ O (k log n).

Tiempo total: O (n log n) +O (k log n) = O ((n+ k) log n)

Lınea de barrer– p. 21

Page 38: Dra. Elisa Schaeffer · Guardamos en un árbol binario balanceado los segmentos que quedan actualmente bajo de la línea de barrer. El árbol nos da acceso en tiempo O(logn). Se insertarán

Tarea para entregar el martes

Busca en línea un algoritmo de línea de barrer para laconstrucción de diagramas de Voronoia para unconjunto de puntos en R

2.

Da un resumen de las estructuras de datos necesarias ypseudocódigo de nivel general, junto con un análisis de lacomplejidad.

La idea no es tanto copiar directamente el pseudocódigo y el análisis de algún lugar,

sino encontrar las definiciones y la idea del algoritmo en línea y después pensar.

aSirven por ejemplo para convertir un conjunto de puntos en ungrafo plano

— tarea extra es explicar como.

Lınea de barrer– p. 22