En el de informática, un árbol del intervalo del es un pidió la estructura de datos del árbol para llevar a cabo intervalos. Específicamente, permite que uno encuentre eficientemente todos los intervalos que se traslapen con cualquier intervalo o punto dado. Es de uso frecuente para las preguntas de la visualización en una ventana, por ejemplo, encontrar todos los caminos en un mapa automatizado dentro de un viewport rectangular, o encontrar todos los elementos visibles dentro de una escena tridimensional.

En un caso simple, los intervalos no se traslapan y pueden ser insertados en un árbol binario simple y ser preguntados en tiempo de O ( n del registro). Sin embargo, con intervalos arbitrariamente traslapados, no hay manera de comparar dos intervalos para la inserción en el árbol puesto que los orderings clasificados por los puntos del principio o los puntos de conclusión pueden ser diferentes. Puede ser que sea tempting construir dos árboles paralelos, uno pedido por el punto del principio, y uno pedido por el punto de conclusión de cada intervalo. Podemos desechar mitad de cada árbol en tiempo de O ( n del registro), pero los resultados se deben combinar, requiriendo tiempo de O ( n ). ¡Esto nos da preguntas en O ( n + el n del registro) = O ( n ), no mejor que fuerza bruta!

Los árboles del intervalo solucionan este problema. Este artículo describe 2 diseños alternativos para un árbol del intervalo.

Alternativa 1

Las preguntas requieren tiempo de O ( n del registro + el m ), con el n que es el número total de intervalos y el m siendo el número de resultados divulgados. La construcción requiere tiempo de O ( n del registro del n ), y el almacenaje requiere el espacio de O ( n ).

Construcción

Dado un sistema de intervalos del n en la línea de número, queremos construir una estructura de datos de modo que poder recuperar eficientemente todos los intervalos que traslapan otro intervalo o punto.

Comenzamos tomando la gama entera de todos los intervalos y dividiéndola por la mitad en el x_center del (en la práctica, el x_center del se debe escoger para mantener el árbol relativamente equilibrado). Esto da tres sistemas de los intervalos, ésos totalmente a la izquierda del x_center que llamaremos S_left, ésos del totalmente a la derecha del x_center del que llamaremos S_right, y eso el x_center traslapado del que llamaremos S_center .

Los intervalos en el S_left y el S_right se dividen recurrentemente de manera semejante hasta que no haya intervalos dejados.

Los intervalos en S_center que traslapan el punto central se almacenan en una estructura de datos separados ligada al nodo en el árbol del intervalo. Esta estructura de datos consiste en dos listas, uno que contiene todos los intervalos clasificados por su principio señala, y otro que contiene todos los intervalos clasificados por sus puntos de conclusión.

El resultado es un árbol binario con cada almacenar del nodo:
Un punto central
Un indicador a otro nodo que contiene todos los intervalos totalmente a la izquierda del punto central
Un indicador a otro nodo que contiene todos los intervalos totalmente a la derecha del punto central
Todos los intervalos que traslapan el punto central clasificado por su punto del principio
Todos los intervalos que traslapan el punto central clasificado por su punto de conclusión

Intersección

Dado la estructura de datos construida arriba, recibimos las preguntas que consisten en gamas o puntos, y volvemos todas las gamas en el sistema original que traslapa esta entrada.

Con un intervalo

Primero, podemos reducir el caso donde un R del intervalo se da como entrada al caso más simple donde un monopunto se da como entrada. Primero encontramos todas las gamas con el principio o terminamos puntos dentro del R del intervalo de la entrada usar un árbol por separado construido. En el caso unidimensional, podemos utilizar un árbol simple que contiene todos los puntos del principio y de conclusión en el sistema del intervalo, cada uno con un indicador a su intervalo correspondiente.

Una búsqueda binaria en el tiempo de O ( n del registro) para el principio y el extremo de R revela los puntos mínimos y máximos para considerar. Cada punto dentro de esta gama se refiere a un intervalo que traslape nuestra gama y se agregue a la lista del resultado. El cuidado se debe tomar para evitar los duplicados, puesto que un intervalo pudo comenzar y terminar dentro del R . Esto se puede hacer usar una bandera binaria en cada intervalo para marcar independientemente de si se ha agregado al sistema del resultado.

Los únicos intervalos no todavía considerados son esos el traslapado R que no tienen un punto dentro del R, es decir los intervalos que lo incluyen. Para encontrar éstos, escogemos cualquier punto dentro del R y utilizamos el algoritmo abajo para encontrar todos los intervalos el intersecar de ese punto (otra vez, teniendo cuidado de quitar los duplicados).

Con un punto

La tarea es encontrar todos los intervalos en el árbol que traslapen un dado x del punto. El árbol se camina con un algoritmo recurrente similar como sería utilizado para atravesar un árbol binario tradicional, pero con el affordance adicional para los intervalos que traslapan el " center" punto en cada nodo.

Para cada nodo del árbol, el x se compara al x_center, el punto mediano del usado en la construcción del nodo arriba. Si el x es menos que el x_center del, el sistema extremo izquierdo de intervalos, S_left, se considera. Si el x es mayor que el x_center del, el sistema de derecha de intervalos, S_right, se considera.

Mientras que se procesa cada nodo mientras que atravesamos el árbol de la raíz a una hoja, las gamas en su S_center se procesan. Si el x es menos que el x_center del, sabemos que todos los intervalos en el S_center terminan después del x, o no podrían también traslapar el x_center del . Por lo tanto, necesitamos solamente encontrar esos intervalos en el S_center que comiencen antes del x . Podemos consultar las listas de S_center que se han construido ya. Puesto que cuidamos solamente sobre los principios del intervalo en este panorama, podemos consultar la lista clasificada por principios. Suponer que encontramos el número más cercano no mayor que el x en esta lista. Todo se extiende del principio de la lista a ése encontró el x del traslapo del punto porque comienza antes de que el x y extremo después de que el x (mientras que sabemos porque traslapa el x_center del que es más grande que el x . Así, podemos comenzar simplemente a enumerar intervalos en la lista hasta que el valor de la punto final exceda el x .

Asimismo, si el x es mayor que el x_center del, sabemos que todos los intervalos en el S_center deben comenzar antes del x, así que encontramos esos intervalos que terminen después del x usar la lista clasificada por conclusiones del intervalo.

Si el x empareja exactamente el x_center del, todos los intervalos en el S_center se pueden agregar a los resultados sin la transformación posterior y el traversal del árbol puede ser parado.

Dimensiones más altas

La estructura de datos del árbol del intervalo se puede generalizar a un más alto N de la dimensión con tiempo idéntico de la pregunta y de construcción y espacio de O ( n del registro del n ).

Primero, un árbol de la gama en dimensiones del N se construye que permite la recuperación eficiente de todos los intervalos con los puntos del principio y del extremo dentro del R de la región de la pregunta. Una vez que se encuentran las gamas correspondientes, la única cosa se deja que es esas gamas que incluyen la región en una cierta dimensión. Para encontrar estos traslapos, los árboles del intervalo de N se crean, y un de intersección R del eje se pregunta para cada uno. Por ejemplo, en dos dimensiones, la parte inferior del cuadrado R (o cualquier otra horizontal como la intersección de él) sería preguntada contra el árbol del intervalo construido para el eje horizontal. Asimismo, la izquierda (o cualquier otra línea vertical R) de intersección sería preguntado contra el árbol del intervalo construido en el eje vertical.

Cada árbol del intervalo también necesita una adición para dimensiones más altas. En cada nodo que atravesamos en el árbol, x se compara con el S_center para encontrar traslapos. En vez de dos clasificó listas de puntos como fue utilizado en el caso unidimensional, se construye un árbol de la gama. Esto permite la recuperación eficiente de todos los puntos en el S_center que traslapen el R de la región.

  • Zenithic
  • Platte Canyon High School shooting
    Random links:Teodora va salvaje | Francés de Percy | Shioya, Tochigi | Mauricio Godelier | Raymond Lygo

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