J'ai besoin d'une structure de données pouvant stocker des plages non superposées dans une même dimension. Toute la gamme de la dimension n'a pas besoin d'être complètement couverte.Structure de données pour plages non superposées dans une même dimension
Un exemple serait un planificateur de salle de conférence. La dimension est le temps. Il n'y a pas deux horaires qui peuvent se chevaucher. La salle de conférence n'est pas toujours programmée. En d'autres termes, pour un temps donné, il peut y avoir au plus un horaire.
Une solution rapide est pour une plage pour stocker les heures de début et de fin.
Range {
Date start
Date end
}
Ceci est non-normalisé et nécessite que le conteneur n'impose aucun chevauchement. Pour deux plages adjacentes, l'extrémité précédente sera redondante avec le démarrage suivant.
Un autre schéma pourrait impliquer le stockage d'une valeur limite avec chaque plage. Mais pour une séquence contiguë de plages, il y aura toujours une valeur de limite de plus que les plages. Pour contourner ce problème de la séquence peut être représentée par des valeurs et des plages limites alternatif:
B = valeur limite, r = distance
BrBrB
La structure de données peut ressembler à:
Boundary {
Date value
Range prev
Range next
}
Range {
Boundary start
Boundary end
}
Essentiellement, il s'agit d'une liste à double liaison avec des types alternés. En fin de compte, quelle que soit la structure de données que j'utilise, elle sera représentée à la fois dans la mémoire (code de l'application) et dans une base de données relationnelle.
Je suis curieux de savoir quelles solutions éprouvées académiques ou industrielles existent.