2008-10-17 11 views
8

Я пытаюсь найти эффективную реализацию дерева интервалов C++ (в основном, вероятно, на основе красных черных деревьев) без вирусной или ограничительной лицензии. Любые указатели на легкую автономную реализацию? Для случая использования я имею в виду, что набор интервалов известен с самого начала (скажем, миллион), и я хочу иметь возможность быстро получить список интервалов, которые перекрывают данный интервал. Таким образом, дерево, когда-то построенное, не изменится - просто нужны быстрые запросы.Поиск реализации алгоритма дерева интервалов C++

ответ

3

Стандартная библиотека C++ предлагает красные/черные деревья std::map, std::multimap, std::set и std::multiset.

Действительно, я не могу думать о какой-либо способ справиться с этим более эффективно, чем держать std::map пар итераторов, и передает эти пары итераторов для upper_bound() и lower_bound(). Вы хотите, чтобы пары итераторов содержались в самой карте, чтобы вы могли легко получить нуль, в зависимости от того, какие пары, вероятно, будут в интервале (если начальный итератор в «промежутке-кандидате» приходит после окончания данного интервала вы смотрите, тогда вы можете пропустить проверку того, что - и все последующие - пары итераторов).

+0

Не могли бы вы объяснить это немного подробнее о том, как map/set может быть реализован как интервальные деревья? – Kyuubi 2013-08-05 10:33:06

+0

@ Kyuubi: Я предложил реализовать дерево интервалов с помощью `std :: map` /` std :: set` (то есть, начиная с `std :: map` /` std :: set` и заканчивая деревом интервалов ; ** NOT ** начиная с дерева интервалов и реализации `std :: map`,` std :: set`). – 2013-08-06 05:45:51

1

Существует также реализация C# интервала дерева по адресу this link. Достаточно легко перевести на C++ для нуждающихся