structures disjoint data coursera data-structures

data structures - disjoint - Estructura de datos para búsqueda rápida de intervalos de tiempo



data structures pdf (4)

Tengo un conjunto de intervalos de tiempo In = (an, bn) . Necesito realizar muchas búsquedas donde me den un tiempo t y necesito devolver rápidamente los intervalos que contienen t , por ejemplo, esos intervalos tales que un <= t <= bn .

¿Qué es una buena estructura de datos o algoritmo para esto?

Si importa, en mi caso los an y bn son enteros.


Esta es básicamente una cuestión de partición de espacio. Tiene un espacio grande con contenedores y un punto específico en ese espacio, ¿qué contenedores toca? Muchos juegos tienen que resolver este problema, por lo que no sería una mala idea comenzar allí. Busque artículos sobre "Detección de colisión de fase amplia".

La forma más sencilla de hacerlo es dividir el espacio numérico en un número constante de piezas. Cada pieza sabe qué conjuntos se intersectan con ella, algo que se calcula cada vez que se agrega un nuevo conjunto. Ahora, en lugar de probar cada conjunto cuando tiene un punto, solo necesita verificar los conjuntos contenidos en la pieza en la que se encuentra el punto.

Otro algoritmo general y eficiente utilizado es la división de espacios binarios. Este algoritmo subdivide su espacio en dos lados. Cada lado sabría qué conjuntos se intersecan con él. Puede repetir este proceso de forma recursiva con la precisión deseada (aunque no tiene sentido crear una subdivisión más pequeña que el rango de su conjunto más pequeño).




Su problema es solo unidimensional, por lo que es un poco más simple que los problemas de partición de espacio que se encuentran en la mayoría de los juegos. Podría tener solo un BST simple y en cada hoja recuerde la lista de intervalos a la izquierda de la hoja.

si tuviera intervalos A (0, 10) y B (5, 15), entonces las hojas del árbol serían (0 con la lista vacía), (5 con A), (10 con A, B) y (15 con SEGUNDO).