У меня есть (большой) набор данных. Он состоит из элементов с свойством timestamp, поэтому я бы назвал их событиями для ясности (хотя это может быть любое сопоставимое свойство).
Если я хочу иметь возможность быстро получать все события с меткой времени между A и B, я должен хранить их в TreeMap. Но это не конец истории.
Существуют отдельные события (с одной временной меткой) и непрерывные события (с двумя временными отметками - один для начала и один для конца).
Теперь давайте обозначим четыре метки времени ABCD, такие, что A <B <C <D. Существует также непрерывное событие x, начинающееся с A и заканчивающееся на D.
Интересно, существует ли эффективная структура данных, которая при запросе событий между B и C также возвращает событие x (потому что оно имеет общую часть с периодом, который мы запрашиваем). Самым важным для меня является стоимость приобретения элементов, но также важны затраты на построение и обновление структуры.
И, наконец, было бы еще лучше, если бы была уже реализована реализация Java такой структуры.
Вы ищете Сегмент-Дерево. Реализация одного события тривиальна (выбор простой зависит от реализации дерева) -
[A,A]
или:[A,A+e]
такое, что e
- наименьшее положительное число, которое может быть представлено.Посмотрите на этот вопрос, и вы также можете искать и задавать этот тег. наслаждаться