Esta fue la presentación final de mi tópico especial en estructuras de datos espaciales.
Antes de que alguién lo mencione: Si, el ejemplo del B+ Tree tienen un error.
El código está en:
https://bitbucket.org/demiangutierrez/space
Advertencia: No es una librería de estructuras de datos, no es estable, no tienen una buena API, tiene bugs, hay repetición, inconsistencias, etc. Es código que se escribió con fines académicos, no para producción. Algún día pretendo transformarlo en una librería (se acepta ayuda), pero es sucederá (si sucede) en un futuro muy lejano.
1. Estructuras de Datos Espaciales
Tópico Especial
Demián Gutierrez
Departamento de Computación
Septiembre 2013
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 1/119
3. ¿qué tipos de datos vamos a manejar?
P1
P2
P3
P4
P5
L1
L2
L3
R1
R2
R3
R5
R6
R4
...generalmente en 2D, en 3D,
y en algunos casos, también n-dimensionales
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 3/119
4. ¿qué operaciones vamos a realizar?
¿qué problemas vamos a resolver?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 4/119
5. “construir” una estrucura de datos en base a un conjunto de datos
(puntos, líneas, rectángulos, etc)
insertar/eliminar elementos en una estructura de datos
(no aplica a todas)
realizar algún tipo de consulta
realizar algún tipo de combinación, división, etc
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 5/119
12. P3
P2
P1
P4
P5
P6
P7
P8
P9
punto/objeto más cercano:
¿cuál es el punto u objeto más cercano a un punto dado?
(no tratado en el presente tópico especial)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 12/119
15. P3
P2
P1
P4
P5
P6
P7
P8
P9
par de puntos más cercanos:
dado un conjunto de puntos ¿cuál es el par de puntos más
cercanos entre si?
(no tratado en el presente tópico especial)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 15/119
17. búsqueda de patrones y grupos / clasificación:
¿qué patrones o grupos existen en un conjunto de puntos?
¿dado un nuevo punto ¿a qué grupo pertenece?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 17/119
19. clasificación / compresión:
¿qué áreas o bloques contienen información
similar o del mismo tipo?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 19/119
21. pathfinding:
¿camino óptimo del punto A al punto B? ¿hay un camino?
¿cómo explotar ciertas características espaciales para optimizar
algoritmos tradicionales de búsqueda?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 21/119
22. muchas otras
en general, las estructuras de datos espaciales
tienen un campo de aplicación extremadamente ámplio
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 22/119
24. implementar un conjunto de estructuras de datos
espaciales para aprender lo más posible sobre el tema
sentar las bases de lo que puede ser en el futuro una
biblioteca de estructuras de datos espaciales y geometría
computacional escrita en Java
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 24/119
25. plan inicial de trabajo
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 25/119
26. basado principalmente en el libro de
Hanan Samet,
The Design and Analisys of Spatial Data Structures
+ BSPs (binary space partition)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 26/119
27. Point Data
Nonhierarchical Data Structures
Point Quadtrees
K-D Trees
Range Trees
Region Based Quadtrees
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 27/119
28. Collection of Small Rectangles
Plane-Sweep Methods and the Rectangle Intersection Problem
Multiple Quadtree Block Representations
R-Trees
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 28/119
29. Volume Data
Region Octrees
PM Octrees
BSP (Binary Space Partition)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 29/119
30. Algunos Extras/Aplicaciones
Hierarchical A*
Marching Squares
Convex Hull (Polígono/Casco Convexo)
Algoritmo de Douglas-Peucker (Suavizado de Polígonos)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 30/119
32. son el equivalente, en 2D de un árbol binario de búsqueda
1 3
2
4
5
6
8
7 9
10
11
12
14
13 15
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 32/119
33. cada punto en un Point Quadtree
divide el espacio en cuatro cuadrantes
P1
NW NE
SESW
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 33/119
34. la división del espacio se hace recursivamente
por cada punto que se inserta
P1
NE
SESW
P2
NW
NW NE
SESW
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 34/119
35. el resultado es una estructura “arborea”,
donde cada nodo tiene cuatro hijos
NW NE SW SENW NE SW SE NW NE SW SE NW NE SW SE
NW NE SW SE
...
esta “forma” es bastante común y se verá
también en otras estructuras
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 35/119
36. la estrategia de búsqueda consiste en encontrar características
geométricas que permitan descartar caminos completos para así
“podar” ramas completas
NW NE SW SENW NE SW SE NW NE SW SE NW NE SW SE
NW NE SW SE
...
esta estrategia es usada también en otras estructuras “arboreas”
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 36/119
37. la eliminación, es una operación más compleja que en un árbol
binario de búsqueda (1/3)
1 3
2
4
5
6
8
7 9
10
11
12
14
13 15
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 37/119
38. la eliminación, es una operación más compleja que en un árbol
binario de búsqueda (2/3)
1 3
2
5
4
6
8
7 9
10
11
12
14
13 15
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 38/119
39. la eliminación, es una operación más compleja que en un árbol
binario de búsqueda (3/3)
1 3
2
5
6
8
7 9
10
11
12
14
13 15
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 39/119
40. si se analiza el siguiente point quadtree
P1
P2
P3
P4
P5
P6
P7
P8
P9
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 40/119
41. se obtiene el siguiente árbol
... ... P7 ...... ... ... P6 ... P8 ... ... P9 ... ... ...
P2 P3 P4 P5
P1
si queremos eliminar P1, ¿quién es el sucesor o el predecesor?
¿con quién se intercambia el nodo que queremos eliminar?
¿hay un orden natural en los datos?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 41/119
42. en este caso, ¿con quién intercambiamos P1?
P1
P6
P7
P8
P9
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 42/119
43. ¿y en este caso? ¿con quién intercambiamos P1?
P1
P6 P7
P8
P9
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 43/119
44. ¿y en este otro caso? ¿con quién intercambiamos P1?
P1
P6
P7
P8
P9
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 44/119
45. buscar un nodo e insertar un hijo tiene un costo promedio de
O(log4N)
el peor caso en la búsqueda de un rango es de O(2N1/2
)
eliminación (algoritmo simple): se busca el nodo a eliminar
(O(log4N)) y se reinsertan los nodos que están por debajo del
nodo eliminado (¿O((M +1)log4N), donde M es el número de
hijos del nodo eliminado?)
eliminación (algoritmo complejo): hay algoritmos más complejos y
difíciles de implementar que reducen la cantidad de nodos que es
necesario reinsertar
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 45/119
49. cada punto divide el espacio en dos “semiespacios”
P1
x<=Px1
x> Px1
la división se hace usando sólo una de las coordenadas del punto
y una línea paralela a uno de los ejes
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 49/119
50. la coordenada y el eje seleccionados para hacer la división
dependen del nivel del punto dentro del árbol que conforma la
estructura de datos
P1
x<=Px1
x> Px1
y<=Py2
y> Py2
P2
P3
y<=Py3
y> Py3
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 50/119
51. para niveles impares se utiliza la coordenada X del punto y la
división se hace paralela al eje Y, de lo contrario, se utiliza la
coordenada Y y la división se hace paralela al eje X
P1
P2 P3
... ...
P4
... ...
P5
... ...
P6
... ...
P7
x<=Px1
x> Px1
y<=Py2
y> Py2
y<=Py3
y> Py3
x <= > <= > <= > <= >
L1: X
L2: Y
L3: X
L4: Y
...
esta idea puede fácilmente extenderse a datos
multidimensionales
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 51/119
52. buscar un nodo e insertar un hijo tiene un costo promedio de
O(log2N)
el peor caso en la búsqueda de un rango es de O(kN1−1/k
),
donde k es el número de claves o dimensión del árbol
eliminación: la eliminación es un algoritmo complejo, tiene
similitud con la eliminación en un árbol binario.
la cota máxima de eliminar un nodo seleccionado aleatoriamente
es O(log2N), siendo el peor caso eliminar la raiz, que es
linealmente acotado
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 52/119
56. dada una región bien definida
usualmente un rectángulo cuyos lados miden 2n
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 56/119
57. el espacio se divide recursivamente en cuatro partes según sea
necesario, de tal forma que cada parte tenga 1/4 del área del
rectángulo inicialmente definido
P1
el rectángulo inicial corresponde al nodo raiz del árbol,
cada división corresponde a un nodo hijo
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 57/119
58. en algunos casos no es necesario hacer ninguna división, porque
el punto insertado corresponde a un nodo vacío
P1
P2
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 58/119
59. las divisiones se hacen recursivamente a medida que se insertan
puntos. . .
P1
P2
P3
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 59/119
60. garantizando que siempre haya sólo un punto por nodo
P1
P2
P3
P4
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 60/119
61. esto puede traer algunos problemas
¿cómo se resuelven?
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 61/119
62. Plane-Sweep Methods and the Rectangle
Intersection Problem
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 62/119
63. PROBLEMA:
¿Qué rectángulos se intersectan con qué rectángulos?
R1
R2
R3
R4
R5
R6
R7
R8
Solución ingenua, todos contra todos (muy poco eficiente)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 63/119
64. Dada una línea, alineada con el eje X se puede “barrer” el plano
de izquierda a derecha
R1
R2
R3
R4
R5
R6
R7
R8
Las coordenadas de inicio y de fin en X de cada rectángulo se
pueden almacenar en un árbol binario de búsqueda (o alguna
otra estructura similar) para mantener un orden
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 64/119
65. Cuando se encuentra un rectángulo, se añade a una estructura
de datos adicional, pero esta vez, ordenada por el inicio y el fin
en Y de cada rectángulo
R1
R2
R3
R4
R5
R6
R7
R8
R1
Por la naturaleza del barrido en X se sabe que cada rectángulo
en la estructura de datos adicional se intersectan al menos en X
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 65/119
66. Cada vez que se añade un elemento a la estructura de datos
adicional se verifica si el rectángulo nuevo se intersecta con
alguno de los rectángulos previamente insertados
R1
R2
R3
R4
R5
R6
R7
R8
R1
, R2
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 66/119
67. Si se encuentra una intersección en Y, entonces se sabe que
ambos rectángulos se intersectan en el espacio
R1
R2
R3
R4
R5
R6
R7
R8
R1
, R2
, R3
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 67/119
68. Cuando el barrido en X llega al final de un rectángulo, lo remueve
de la estructura de datos adicional
R1
R2
R3
R4
R5
R6
R7
R8
R2
, R3
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 68/119
80. para entender un R-Tree, es necesario entender un B+ Tree
5 5 7 5 7 97 9
11 5 7 9 11 Oops... 5 7 9 11
5 7 9 11
9
...
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 80/119
81. 5 7 9 11
9
5 7 8 9 11
9
8
5 7 86 9 11
9
6
5 6 7 8
7 9
...
9 11
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 81/119
82. 5 6 7 8
7 9
9 11
4 653 7 8
7 9
9 11
3, 4
43 7 8
5 7 9
9 11
...
5 6
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 82/119
83. eventualmente, no sólo se desborda un nodo hoja sino que
también se desborda un nódo interno
43 7 8
5 7 9
9 115 6
43 7 8
5 7 9
9 11 12 13
12, 13
5 6
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 83/119
84. en ese momento, el árbol crece un nivel
y al mismo tiempo se mantiene balanceado
43 7 8
5 7 9 12
9 11
...
5 6 12 13
43 7 8
9 12
9 11
...
5 6 12 13
5
7
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 84/119
85. un R-Tree funciona de forma similar, salvo por el hecho de que no
existe un orden absoluto en los datos a almacenar
a b c
a
b
c
a
b
c
d
w x
a c b d
a
b
c
d
e
f
w x
a c e b d f
es perfectamente válido que los rectángulos se solapen entre sí
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 85/119
86. a medida que se insertan nodos, estos se van agrupando en
zonas rectangulares, que a su vez se agrupan en zonas
rectangulares y así de forma recursiva.
w y x
c e b d fa g w y
c e b fa g d h
x z
u v
a
b
c
d
e
f
g
w
y x
a
b
c
d
e
f
g h
y x vu
w
z
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 86/119
87. dos de las heurísticas principales usadas para agrupar
rectángulos
a
c e
g
a
c e
g
a
c e
g
a
c e
g
(1)
(2)
(1) minimizar el área de los rectángulos y (2) minimizar el área o
la cantidad de intersecciones de los rectángulos
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 87/119
88. también es posible tener r-trees en 3D
(tomado de wikipedia)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 88/119
90. son estructuras muy similares a los quadtrees, pero en 3D
en lugar de dividir el plano en 4 partes como en los quadtrees,
el espacio se divide en 8 partes
(http://en.wikipedia.org/wiki/File:Octree2.svg)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 90/119
91. los órdenes de ejecución son similares a los de los respectivos
quadtrees, sólo que en lugar de usar log4 se usa log8
(por razones evidentes)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 91/119
93. en un mundo plano, desde el punto de vista de la cámara,
tenemos que “dibujar” los siguientes segmentos
L1
L2
L2
, L1
L1
, L2
dependiendo del orden en que se dibujen se obtienen
distintos resultados, sólo hay un orden correcto
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 93/119
94. sin embargo, aquí tenemos un problema:
L1
L2
L2
, L1
L1
, L2
correcto
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 94/119
95. para resolverlo, es necesario “cortar” uno de los segmentos,
transformándolo en dos segmentos distintos
L1
L2
L3
Correcto: L3
, L2
, L1
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 95/119
96. BSP 2D: Prestar atención al punto amarillo (1/2)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 96/119
97. BSP 2D: Prestar atención al punto amarillo (2/2)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 97/119
100. desde hace algún tiempo, me interesa mucho el problema de la
búsqueda de caminos
después de todo, si se desea implementar un “ambiente virtual” o
un buen juego masivo multijugador de rol es importante tener una
buena IA, y para esto es muchas veces es crítico tener una
buena búsqueda de caminos
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 100/119
101. con mapas pequeños, es fácil y eficiente buscar caminos entre
dos puntos usando Dijkstra, una búsqueda por amplitud o A*
Tomado de:
http://theory.stanford.edu/ amitp/GameProgramming/
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 101/119
102. con un mapa grande tenemos problemas de rendimiento
cada pixel es un nodo: 1024 nodos por 1024 nodos = 1048576
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 102/119
104. A*: 3.6 segundos
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 104/119
105. una posible solución. . .
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 105/119
106. A* jerárquico: 0.15 segundos
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 106/119
107. el problema también se puede atacar desde otro punto de vista
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 107/119
108. el mapa original
Tomado de: http://www.ai-blog.net/archives/000152.html
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 108/119
109. una posibilidad es usando waypoints,
pero esta estrategia trae muchos problemas
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 109/119
110. la mejor solución es usando mallas de navegación,
pero el problema es construir las mallas para cada mapa
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 110/119
111. recast: genera automáticamente mallas de navegación
detour: calcula caminos en función de las mallas de navegación
http://www.mooncollider.com/recast-and-detour/
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 111/119
112. mi intento:
En 2D y es un trabajo en progreso. . .
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 112/119
113. calcular los contornos de las paredes y obstáculos
(usando marching squares)
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 113/119
114. marching squares: casos posibles
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 114/119
115. marching squares: detalle de la imagen
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 115/119
116. bien, pero: ¿cual es el problema con el “marching squares”?
ver la imagen a detalle:
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 116/119
117. para resolver el problema, se implementó el algoritmo de Douglas
Peucker, que básicamente sirve para simplificar polígonos
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 117/119
118. aún quedan algunos problemas que resolver
pero la idea es, una vez que se resuelva el problema de los
contornos, aplicar una Triangulación Delaunay y usar el resultado
como malla de navegación
to be continued. . .
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 118/119
119. ¿Futuro?
Continuar desarrollando la colección de estructuras de datos y
algoritmos para transformarla en una biblioteca de estructuras de
datos espaciales y algoritmos de geometría computacional
Demián Gutierrez Universidad de Los Andes
Estructuras de Datos Espaciales 119/119