En el de informática, un d-árbol del k del (corto para el árbol k-dimensional ) es una estructura de datos de espacio-división para los puntos de organización en un k - espacio dimensional . los d-árboles del k son una estructura de datos útil para varios usos, tales como búsquedas que implican una llave de búsqueda multidimensional (e. la gama busca y el vecino más cercano busca . los d-árboles del k son una caja especial de los árboles BSP

Un d-árbol del k utiliza solamente los planos que parten que son el perpendicular a una de las hachas del sistema coordinado . Esto diferencia de los árboles de BSP, en los cuales los planos que parten arbitrarios pueden ser utilizados. Además, en la definición típica cada nodo de un d-árbol del k, de la raíz al deja, almacena un punto. Esto diferencia de los árboles de BSP, en los cuales las hojas son típicamente los únicos nodos que contienen puntos (u otros primitivos geométricos ). Por consiguiente, cada plano que parte debe pasar con uno de los puntos en el d-árbol del k . el '' k '' d-intenta es una variante que almacenen datos solamente en nodos de hoja. Vale el observar de eso en una definición alternativa del d-árbol del k que los puntos se almacenan en sus nodos de hoja solamente, aunque cada plano que parte todavía pase con uno de los puntos.

Nomenclatura

Técnico, el k de la letra refiere al número de dimensiones. Un d-árbol de 3 dimensiones del k sería llamado un 3d-tree. Sin embargo, el " de la frase; d-tree" de 3 dimensiones del k ; se utiliza más comunmente. (Es también más descriptivo, puesto que un árbol de 3 dimensiones podría ser cualesquiera de una variedad de diversas cosas, pero el d-árbol del k del término refiere a un tipo específico de árbol de espacio-división.) El k y d de las letras es ambo minúscula, incluso cuando el término viene al principio de una oración, y el k está en los it3alicos . Sin embargo, los deletreos variables son comunes, por ejemplo KD-árbol y Kd-árbol.os y 3D son ejemplos del " mayúsculo del significado de D; dimensional".

Operaciones en d-árboles del k

Construir un d-árbol del k

Puesto que hay muchas maneras posibles de elegir los planos que parten eje-alineados, hay muchas maneras diferentes de construir d-árboles del k . El método canónico de construcción del d-árbol del k tiene los apremios siguientes:
Como uno baja el árbol, uno completa un ciclo a través de las hachas usadas para seleccionar los planos que parten. (Por ejemplo, la raíz tendría un x - plano alineado, los niños de la raíz ambos tendrían y - los planos alineados, los nietos de la raíz toda tendría z - planos alineados, y así sucesivamente.)
En cada paso, el punto seleccionado para crear el plano que parte es el mediano de los puntos que son puestos en el d-árbol del k, con respecto a sus coordenadas en el eje que es utilizado. (Observar la asunción que alimentamos el sistema entero de puntos en el algoritmo up-front.) Este método lleva a un d-árbol balanceado k de, en el cual cada nodo de hoja es distancia casi igual de la raíz. Sin embargo, los árboles equilibrados no son necesario óptimos para todos los usos.

Observar también que no es requirió seleccionar el punto mediano. En ese caso, el resultado es simplemente que no hay garantía que el árbol será equilibrado. Un heurístico simple a evitar cifrar un algoritmo mediano-que encuentra del linear-tiempo complejo ni usar una clase de O ( n del registro del n ) es utilizar clase para encontrar el punto medio de un número fijado de de puntos seleccionados del aleatoriamente para servir como la línea de corte. Esta técnica da lugar prácticamente a árboles agradable equilibrados.

Dado una lista de puntos del n, el algoritmo siguiente construirá un d-árbol equilibrado del k que contiene esos puntos.

kdtree de la función (lista del del pointList de los puntos, de la profundidad del internacional ) { si el del pointList de es vacío nada de vuelta del ; otro { Eje selecto de // del basado en profundidad de modo que el eje complete un ciclo con todos los valores válidos eje del internacional del var : = MOD k del de la profundidad; La lista del punto de la clase de // del y elige punto medio como elemento del pivote mediano selecto del pointList de ; El // crea nodo y construye las sub-estructuras nodo del tree_node var ; node.location: = punto medio; node.leftChild: = kdtree ( de los puntos en del pointList de antes del punto medio de, depth+1); node.rightChild: = kdtree ( de los puntos en del pointList de después del punto medio de, depth+1); nodo de vuelta del ; } } Es común que " de los puntos; after" el punto medio incluye solamente unos que sean mayor o igual el punto medio. Otro acercamiento es definir un " superkey" funcionar que compara los puntos en otras dimensiones. Pasado, puede ser aceptable dejar los puntos iguales a la mentira mediana de cualquier lado.

Este algoritmo ejecutado en el lenguaje de programación del pitón es como sigue:

nodo de la clase : paso kdtree del def (pointList, depth=0): si pointList del no de : de vuelta ninguno # eje selecto basado en profundidad de modo que el eje complete un ciclo con todos los valores válidos k = len (pointList) # asume que todos los puntos tienen la misma dimensión % del eje = de la profundidad k # lista del punto de la clase para seleccionar mediano pointList.sort (lambda x del del key=: x) el punto medio = len (pointList) el de // 2 # elige mediano El # crea nodo y construye las sub-estructuras nodo = nodo () node.location = pointList node.leftChild = kdtree (pointList, depth+1) node.rightChild = kdtree (pointList, depth+1) nodo de vuelta del

El uso del ejemplo sería:

pointList = (5.2) árbol = kdtree (pointList)

El árbol generado se demuestra a la derecha.

Este algoritmo crea el invariante que para cualquier nodo, todos los nodos en la sub-estructura izquierda son en un lado de un que parte plano, y todos los nodos en la sub-estructura derecha están en el otro lado. Los puntos que mienten en el plano que parte pueden aparecer de cualquier lado. El plano que parte de un nodo pasa a través del punto asociado a ese nodo (designado en el código el node.

Adición de elementos a un d-árbol del k

Uno agrega un nuevo punto a un d-árbol del k de la misma forma que uno agrega un elemento a cualquier otro árbol. Primero, de través el árbol, a partir de la raíz y la mudanza al niño izquierdo o adecuado dependiendo de si el punto ser insertado está en el " left" o " right" lado del plano que parte. Una vez que usted consigue a un nodo de hoja, agregar el nuevo punto como el niño izquierdo o adecuado del nodo de hoja, otra vez dependiendo de qué lado del plano que parte del nodo contiene el nuevo punto.

Eliminación de elementos de un d-árbol del k

Quitar un punto de un d-árbol existente del k, sin la fractura del invariante.

Equilibrio de un d-árbol del k

El equilibrio de un d-árbol del k requiere cuidado. Porque los d-árboles del k se clasifican en dimensiones múltiples, la técnica de la rotación del árbol no se puede utilizar para balancearlas — esto puede romper el invariante.

¡

El vecino más cercano en un d-árbol del k

El algoritmo vecino (NN) más cercano, encontrar el NN a un punto dado de la blanco no en el árbol, confía en la capacidad de desechar las porciones grandes del árbol realizando una prueba simple. Para realizar el cálculo de NN, el árbol se busca en una profundidad-primera manera, refinando la distancia más cercana. Primero el nodo de raíz se examina con una asunción inicial que la distancia más pequeña al punto siguiente es infinita. El subdomain (correcto o izquierdo), que es un Hyperrectangle, conteniendo el punto de la blanco se busca. Esto se hace recurrentemente hasta que una región mínima final que contiene el nodo se encuentre. El algoritmo entonces (con la repetición) examina cada nodo del padre, considerando si es posible que el otro dominio contenga un punto que esté más cercano. Esto es realizada probando para la posibilidad de la intersección entre el hyperrectangle y el hypersphere (formados por nodo de la blanco y el radio mínimo actual). Si el rectángulo que no se ha examinado recurrentemente con todo no interseca esta esfera, después no hay manera que el rectángulo puede contener un punto que sea un mejor vecino más cercano. Se repite esto hasta que se busquen o se desechen todos los dominios, así dejando al vecino más cercano como el resultado final. Además éste también tiene la distancia al vecino más cercano en la mano también. Encontrar el punto más cercano es una operación de O (logN).

El algoritmo se puede ampliar de varias maneras por modificaciones simples.

El vecino más cercano aproximado puede ser alcanzado simplemente fijando un límite superior en los puntos del número para examinar en el árbol, o interrumpiendo el proceso de la búsqueda basado sobre un reloj en tiempo real (que pueda ser más apropiado en puestas en práctica de hardware). El vecino más cercano para los puntos que están en el árbol ya puede ser alcanzado no poniendo al día el refinamiento para los nodos que dan la distancia cero como el resultado.

El vecino más cercano aproximado es útil en usos en tiempo real tales como robótica debido a la velocidad significativa creciente ganada en la búsqueda para el mejor punto exhaustivo.

usos del d-árbol del k

Búsqueda ortogonal de la gama en un d-árbol del k

Utilizar un d-árbol del k para encontrar todos los puntos que mienten dentro de un rectángulo dado (o de un hyperrectangle). Esta operación también se llama un la búsqueda ortogonal de la gama. El esquema del algoritmo es el siguiente.

pregunta de la función (rectángulo del r, nodo del kd-árbol del n) { eje del var : = n.axis; punto medio del var : = n.median; si mediano entonces del ≥ r.low de pregunta (r, n.left); El salto de/* se fue si es máximo del árbol izquierdo (mediano) está fuera de gama * si mediano entonces del ≤ r.high de pregunta (r, n.right); La derecha del salto de/* si el minuto del árbol derecho (mediano) está fuera de gama * si mediano de en el entonces de r.point del ; }

La pregunta comienza en el nodo n del kd-árbol del que es la raíz del árbol. Asumimos que el hyperrectangle r es un arsenal de intervalos puestos en un índice por eje.

Determinando dónde evaluar una superficie

En la regresión local, es común evaluar la superficie cabida directo solamente en las cimas de un d-árbol del k e interpolarla a otra parte. Este uso, que se representa en la imagen arriba, es asegurarse de que solamente tantas evaluaciones directas están realizadas como es necesario. Desde el " del d-árbol del k ; adapts" sí mismo al espacio de las variables del calculador, este método puede proporcionar una aproximación excelente a la superficie verdadera del loess . Si la aproximación es pobre, puede ser mejorada por la subdivisión adicional del cel del árbol

Complejidad

La construcción de un d-árbol estático del k de puntos del n tarda tiempo O ( n del registro 2 del n ) si una clase O ( n del registro del n ) se utiliza para computar el punto medio en cada nivel. La complejidad es el O ( n del registro del n ) si un algoritmo mediano-que encuentra linear tal como el que está descrito en Cormen y otros se utiliza.

que inserta un nuevo punto en un d-árbol equilibrado del k tarda tiempo de O ( n del registro).
La eliminación de un punto de un d-árbol equilibrado del k tarda tiempo de O ( n del registro).
Preguntar una gama eje-paralela en un d-árbol equilibrado del k toma tiempo de O ( n 1-1/d + el k ), donde está el número k de los puntos divulgados, y d la dimensión del d-árbol del k .

Variaciones

En vez de puntos

En vez de puntos, un d-árbol del k puede también contener los rectángulos o los hyperrectangles.o rectángulo se considera un objeto 4D (xlow, xhigh, ylow, yhigh). Así la búsqueda de la gama se convierte en el problema de volver todos los rectángulos que intersecan el rectángulo de la búsqueda. El árbol se construye la manera generalmente con todos los rectángulos en las hojas. En una búsqueda ortogonal de la gama, el enfrente del coordenada de se utiliza al comparar contra el punto medio. Por ejemplo, si el nivel actual está partido a lo largo de xhigh, comprobamos el coordenada de xlow del rectángulo de la búsqueda. Si el punto medio es menos que el coordenada de xlow del rectángulo de la búsqueda, después ningún rectángulo en la rama izquierda puede intersecarse nunca con el rectángulo de la búsqueda y así que puede ser podado. Si no ambas ramas deben ser atravesadas. Ver también el árbol del intervalo, que es un caso especial de 1 dimensión.

Ver también

d-árbol implícito de '' k ''
minuto/d-árbol máximo de '' k ''
Octree
Jerarquía de limitación del intervalo
La búsqueda vecina más cercana
Problema de la medida de Klee
libkdtree++, una abrir-fuente STL-como la puesta en práctica de los d-árboles del k en C++.
  • Zenithic
  • Pentabromodiphenyl ether
    Random links:Ōtō, Nara | Santo secular | Bases nacionales de la alta aventura de la grada norteña | & de Wallace; Gromit: La maldición del Ser-Conejo

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">