Necesito una estructura de datos que pueda almacenar rangos no solapados dentro de una sola dimensión. El rango completo de la dimensión no necesita estar completamente cubierto.Estructura de datos para rangos no solapados dentro de una única dimensión
Un ejemplo sería un planificador de sala de conferencias. La dimensión es tiempo No hay dos horarios pueden solaparse. La sala de conferencias no siempre está programada. En otras palabras, por un tiempo dado puede haber como máximo un horario.
Una solución rápida es para un rango para almacenar las horas de inicio y finalización.
Range {
Date start
Date end
}
Esto no es normalizado y requiere que el contenedor no exija superposición. Para dos rangos adyacentes, el extremo anterior será redundante con el siguiente inicio.
Otro esquema puede implicar el almacenamiento de un valor de límite con cada rango. Pero para una secuencia contigua de rangos, siempre habrá un límite de valores más que rangos. Para evitar esto la secuencia puede ser representada como alternando valores de límites y rangos: podría parecerse
B = valor límite, r = rango
BrBrB
La estructura de datos:
Boundary {
Date value
Range prev
Range next
}
Range {
Boundary start
Boundary end
}
En esencia, es una lista doblemente vinculada con tipos alternativos.
En definitiva, cualquiera que sea la estructura de datos que utilizo se representará tanto en la memoria (código de aplicación) como en una base de datos relacional.
Tengo curiosidad por saber qué soluciones académicas o industriales existen.