Мне нужна структура данных, которая может хранить непересекающиеся диапазоны в одном измерении. Весь диапазон измерения не должен быть полностью покрыт.
Примером может служить планировщик конференц-зала. Измерение - это время. Никакие два графика не могут пересекаться. Конференц-зал не всегда запланирован. Другими словами, на данный момент может быть не более одного расписания.
Быстрое решение для диапазона, чтобы сохранить время начала и окончания.
Range {
Date start
Date end
}
Это ненормализовано и требует, чтобы контейнер не перекрывал друг друга. Для двух соседних диапазонов предыдущий конец будет избыточен с началом следующего.
Другая схема может включать сохранение одного граничного значения с каждым диапазоном. Но для непрерывной последовательности диапазонов всегда будет еще одно граничное значение, чем диапазоны. Чтобы обойти это, последовательность может быть представлена в виде чередующихся граничных значений и диапазонов:
B = граничное значение, r = диапазон
В-Г-В-Г-В * * 1 015
Структура данных может выглядеть следующим образом:
Boundary {
Date value
Range prev
Range next
}
Range {
Boundary start
Boundary end
}
По сути это двусвязный список с чередующимися типами.
В конечном итоге, любая структура данных, которую я использую, будет представлена как в памяти (код приложения), так и в реляционной базе данных.
Мне любопытно, какие существуют академические или отраслевые решения.