Probablemente la primera solución general para buscar en espacios
métricos fue presentada en [BK73], donde se propone un árbol
llamado ``Burkhard-Keller Tree'' o BKT, el cual es recomendable para
cuando se usan funciones de distancia discretas. Un desarrollo más sobresaliente
sobre los BKTs es FQT ``Fixed Query Tree'' [BYCMW94].
Este árbol es básicamente un BKT donde todas
las ramas del mismo nivel, tienen el mismo pivote (por supuesto que no necesariamente pertenecen al
conjunto guardado en el subárbol). Los elementos restantes están
guardados en las hojas. La ventaja de tal construcción es que las
comparaciones entre la consulta y los nodos (pivotes) solo se necesitan
una vez y estas ayudan en el recorrido del árbol.
Si visitamos muchos nodos del
mismo nivel, no se necesita calcular más que una comparación porque
todos los pivotes en este nivel son el mismo.
En [BYCMW94] los autores proponen una variante llamada FQHT
``Fixed-Height FQT'',
donde todas las hojas están a la misma profundidad , independientemente del tamaño
del bucket. Esto hace que algunas hojas estén más profundas de lo necesario, lo cual tiene sentido
porque podemos haber desarrollado las comparaciones entre la consulta y el pivote
de un nivel intermedio, y por lo tanto eliminamos libremente una hoja,
sin haber calculado su distancia. En [CMN99] se presenta el
FQA arreglo de consultas fijas (Fixed Query Array), aunque no propiamente un
árbol, no es más que una representación compacta de los FQHT. Imagine que un FQHT de altura fija
es construida en un conjunto. Si recorremos las hojas del árbol de izquierda a derecha y
ponemos los elementos en un arreglo, el resultado es el FQA. Los
elementos del arreglo (renglones) son concatenados en un número que
después es ordenado lexicográficamente, cada subárbol del
FQHT corresponde a un intervalo en el FQA, y cada movimiento en el FQHT es simulado con dos
búsquedas binarias en el FQA. Usando la misma memoria, la simulación del FQA es capaz de
usar muchos más pivotes que el original FQHT, con lo cual prueba su eficiencia.
La primera técnica diseñada para funciones de
distancia continuas fue llamada ``árboles métricos'' en [Uhl91]. Un trabajo más completo con la misma idea
[Yia93] son VPTs ``Vantage Point Tree'', en el cual
se construye un
árbol binario recursivamente, tomando algún elemento como la raíz y tomando la mediana del
conjunto de todas las distancia,
. Los elementos
tales que
son insertados en el subárbol izquierdo, mientras que aquellos tales que
son insertados en el subárbol derecho. Los VPT pueden ser extendidos a árboles
usando los
percentiles uniformes en lugar de solo la mediana, esto es sugerido en [Bri95,BO97]. En
[BO97] se presentó el ``Multi-Vantage Point Tree MVPT
el cual
proponen el uso de muchos elementos en un nodo. Otra generalización de los VPT está dada por
el VPF (Vantage Point Forest) [Yia93]. Este algoritmo está diseñado para búsqueda del vecino más cercano
con un radio limitado (una consulta de tipo (b) con radio máximo
). El método consiste
en excluir, a cada nivel los elementos a distancia
intermedia a sus pivotes. Si
y
corresponden a los puntos más cercanos y más lejanos al
pivote , los elementos
tales que
son excluidos del árbol. Un segundo árbol es construido con la
parte excluida del primer árbol, y así se continúa para obtener un bosque.
Otro algoritmo presentado en
[Uhl91] es GHT árbol de generalización hiperplana (Generalize Hiperplane-Tree)
el cual es un árbol binario
construido recursivamente como sigue. Para cada nodo, dos puntos
y
son seleccionados. Los puntos más cercanos a
que a
van dentro del
subárbol izquierdo y aquellos más cercanos a
van en el subárbol derecho. El GHT es extendido
en [Bri95] a un árbol
, llamado GNAT ''Geometric
Near-Neighbor Access Tree''. Se selecciona, para el primer
nivel pivotes
, y se define
. Esto es,
son los puntos más cercanos a
que a algún otro
. Finalmente dan
algún criterio para seleccionar los
elementos los suficientemente lejanos.
Un algoritmo el cual encierra muchas de las ideas presentadas pero se desarrolla
sorpresivamente mucho mejor por un orden de magnitud es AESA [Vid86] (``Aproximating
Eliminating Search Algorithm''). La estructura no es un árbol, pero la idea es muy
similar, se selecciona un punto aleatorio y miden
, eliminando todos los elementos
los cuales no satisfacen
. Esto se repite hasta que
hay pocos elementos resultantes en el conjunto y son comparados contra
directamente.