Tengo un programa de JavaScript en el que administraré muchos rangos de enteros. En este contexto, un rango es simplemente un valor inicial y uno final (o cualquier cosa equivalente, como un valor de inicio y un valor de longitud), con una referencia a otro objeto. Los rangos se pueden superponer y pueden ser idénticos (aunque el objeto al que se hace referencia será diferente).¿Qué estructura de datos puedo usar para almacenar y recuperar rangos de valores discretos?
Los posibles valores inicial y final están entre 0 y 4294967295 (2 - 1 ó 0xFFFFFFFF
), aunque hay varios grandes "agujeros" en el dominio que nunca cubrirá ningún rango, ni siquiera parcialmente. La mayoría de los rangos serán muy pequeños en comparación con el dominio de las posibilidades: espero que la abrumadora mayoría tenga una longitud inferior a 2000.
Mi caso de uso más importante para esta estructura será buscar todos los rangos que contienen un determinado valor entero. La mayoría de las veces, espero que la búsqueda falle (no habrá rango que contenga el valor dado).
De lo contrario, obviamente también necesitaré agregarle elementos (a menudo) y borrar elementos de él (rara vez). De vez en cuando, también, necesitaré encontrar todos los rangos que se superpongan a un rango dado, en lugar de todos los rangos que contienen un solo valor.
¿Qué tipo de estructura de datos puedo usar para eso? Una búsqueda lineal en una lista de rangos no es práctica porque las búsquedas fallan la mayor parte del tiempo; y necesito hacer búsquedas muy, muy a menudo.
¿Los rangos están limitados entre 0 y max_int? O -inf inf? –
¿Qué es un rango? ¿Es simplemente un par '[min, max]'? – kojiro
@joeframbach, 0 a max_int. – zneak