Что я хочу сделать, так это эффективно обрабатывать интервалы. Например, в моем примере интервалы выглядят следующим образом:
[10, 20], [15, 25], [40, 100], [5, 14]
Интервалы являются замкнутыми и целыми числами, а некоторые интервалы могут быть перекрыты. Я хочу найти перекрывающиеся интервалы для данного запроса эффективно . Например, если задано [16, 22]
:
[10, 20], [15, 25]
Вышеуказанные интервалы должны быть рассчитаны как переупорядоченные интервалы.
В настоящее время я пишу дерево интервалов на основе красно-черного дерева (ссылка: CLRS, Введение в алгоритмы). Хотя обнаружение всех перекрывающихся интервалов может быть 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's interval_map
подходит для моих целей?