Я хочу эффективно обрабатывать интервалы. Например, в моем примере интервалы выглядят следующим образом:
[10, 20], [15, 25], [40, 100], [5, 14]
Интервалы являются замкнутыми и целыми числами, а некоторые из интервалов могут быть перекрыты. Я хочу эффективно найти перекрывающиеся интервалы для данного запроса . Например, если задано [16, 22]
:
[10, 20], [15, 25]
Вышеуказанные интервалы следует рассчитывать как интервалы с превышением допустимого значения.
В настоящее время я пишу дерево интервалов на основе красно-черного дерева (ссылка: CLRS, Introduction to Algorithms). Хотя обнаружение всех перекрывающихся интервалов может быть O (n), время выполнения должно быть меньше. Обратите внимание, что интервалы можно удалять и вставлять.
Однако я только что обнаружил, что Boost имеет interval_map
и interval_set
:
http://www.boost.org/doc/libs/1_46_1 /libs/icl/doc/html/index.html
Я пробовал, но поведение для меня очень странное. Например, если сначала вставляется [2, 7]
, а затем [3, 8]
, то результирующая карта будет иметь [2, 3)
], [3, 7]
и (7, 8]
. То есть, когда вставляется новый интервал, разделение выполняется автоматически.
Могу ли я отключить эту функцию? Или Boost interval_map
подходит для моей цели?