The original description of the k-d tree recognized that rebalancing techniques, such as are used to build an AVL tree or a red-black tree, are not applicable to a k-d tree. Hence, in order to build a balanced k-d tree, it is necessary to find the median of the data for each recursive subdivision of those data. The sort or selection that is used to find the median for each subdivision strongly influences the computational complexity of building a k-d tree. This paper discusses an alternative algorithm that builds a balanced k-d tree by presorting the data in each of k dimensions prior to building the tree. It then preserves the order of these k sorts during tree construction and thereby avoids the requirement for any further sorting. Moreover, this algorithm is amenable to parallel execution via multiple threads. Compared to an algorithm that finds the median for each recursive subdivision, this presorting algorithm has equivalent performance for four dimensions and better performance for three or fewer dimensions.
academic
Construcción de un Árbol k-d Equilibrado en Tiempo O(kn log n)
La descripción original del árbol k-d reconoce que las técnicas de reequilibrio utilizadas para construir árboles AVL o árboles rojo-negro no son aplicables a árboles k-d. Por lo tanto, para construir un árbol k-d equilibrado, es necesario encontrar la mediana para cada subdivisión recursiva de los datos. El algoritmo de ordenamiento o selección utilizado para encontrar la mediana en cada subdivisión influye fuertemente en la complejidad computacional de la construcción del árbol k-d. Este artículo analiza un algoritmo alternativo que construye un árbol k-d equilibrado preordenando los datos en cada una de las k dimensiones antes de construir el árbol. Luego, durante la construcción del árbol, se mantienen estos k órdenes ordenados, evitando así la necesidad de ordenamientos adicionales. Además, el algoritmo es adecuado para ejecución paralela mediante multihilo. En comparación con algoritmos que encuentran la mediana para cada subdivisión recursiva, este algoritmo de preordenamiento tiene rendimiento equivalente en cuatro dimensiones y mejor rendimiento en tres o menos dimensiones.
Importancia del árbol k-d: El árbol k-d es una estructura de datos importante introducida por Bentley en 1975 para almacenar datos k-dimensionales, ampliamente aplicada en búsqueda multidimensional, búsqueda del vecino más cercano, consultas de rango y otros escenarios.
Desafíos del Problema de Equilibrio: A diferencia de los árboles binarios estándar, los árboles k-d utilizan diferentes valores clave para la partición en diferentes niveles, lo que hace que las técnicas de reequilibrio tradicionales (como las operaciones de rotación en árboles AVL o árboles rojo-negro) no sean aplicables a árboles k-d.
Limitaciones de los Métodos Existentes:
Los métodos tradicionales requieren encontrar la mediana en cada subdivisión recursiva
Usar Quicksort para encontrar la mediana: mejor caso O(n), peor caso O(n²)
Usar Merge sort o Heap sort: garantiza O(n log n), pero resulta en complejidad general O(n log² n)
El algoritmo de mediana O(n) de Blum et al., aunque teóricamente excelente, es complejo de implementar
Propone un algoritmo de construcción de árbol k-d con complejidad O(kn log n): Evita ordenamientos repetidos en el proceso recursivo mediante preordenamiento
Diseña una estrategia de partición que mantiene el orden de clasificación: Mantiene la ordenación de k matrices preordenadas durante la construcción del árbol
Implementa un esquema de paralelización eficiente: El algoritmo es naturalmente adecuado para ejecución paralela con multihilo
Proporciona análisis de rendimiento integral: Incluye análisis de complejidad teórica y pruebas de rendimiento prácticas
Desarrolla múltiples técnicas de optimización: Incluye seis estrategias de optimización como optimización de comparación de superclaves y particionamiento de ordenamiento retrasado
Entrada: Conjunto de n puntos de datos k-dimensionales
Salida: Árbol k-d equilibrado que admite operaciones eficientes de búsqueda multidimensional
Restricciones: Mantener el equilibrio del árbol, evitar puntos de datos duplicados
Flujo del Algoritmo:
1. Seleccionar el elemento mediano de la matriz de índice de la dimensión actual como punto de división
2. Particionar las matrices de índice de otras dimensiones según este punto de división
3. El proceso de partición mantiene el orden de clasificación dentro de cada matriz
4. Procesar recursivamente las subarrays izquierda y derecha, utilizando cíclicamente diferentes dimensiones
Restricción de Dimensión: El rendimiento en casos de alta dimensionalidad es inferior al algoritmo O(n log n)
Sobrecarga de Memoria: Requiere k matrices de índice, con mayor demanda de memoria
Complejidad de Implementación: La implementación del algoritmo es relativamente compleja, requiriendo manejo cuidadoso de la gestión de matrices de índice
Restricción de Número de Hilos: La estrategia paralela limita el número de hilos a ser potencias de 2
Este artículo cita 21 referencias importantes, que abarcan:
Artículo original del árbol k-d de Bentley 4
Algoritmo de mediana de tiempo lineal de Blum et al. 6
Literatura clásica de varios algoritmos de ordenamiento 8,12,20
Trabajo relacionado en computación paralela y modelado de rendimiento 2,10
Aplicaciones de búsqueda del vecino más cercano y vecino más cercano inverso 7,13
Evaluación General: Este es un artículo de algoritmo de alta calidad que propone un método de preordenamiento innovador en el campo de la construcción de árboles k-d. El análisis teórico del artículo es riguroso, el diseño experimental es completo y el valor práctico es considerable. Aunque tiene limitaciones en casos de alta dimensionalidad, proporciona una solución efectiva para el procesamiento de datos espaciales de baja dimensionalidad, con valor de referencia importante para campos relacionados.