2010-09-20 3 views
7

Вот интересный вопрос: учитывая набор из N интервалов ([начало, конец]), используйте дерево интервалов, чтобы найти максимальное количество перекрывающихся интервалов.Максимальное перекрытие интервалов с использованием дерева интервалов

A similar question В StackOverflow предусмотрено решение O (N), но если мы можем предварительно обработать интервалы в дереве интервалов, возможно, мы сможем найти решение в логарифмическом времени.

На самом деле проблема упражнений в книге «Введение в алгоритмы» Кормена и др. Предполагает, что это возможно, увеличивая дерево красных черных интервалов. Любые идеи, как это можно сделать?

+0

Вас интересуют такие операции, как 'Add (x, y) - добавить интервал к дереву',' Query() - найти максимальное количество перекрывающихся интервалов?? Вы также хотите, чтобы 'Del (x, y) - удалить интервал [x, y] из дерева'? – IVlad

+0

Если интервалы расположены в дереве с сбалансированным интервалом, таком как тот, который указан в книге Кормена, мы уже знаем, что в O (lg N) время выполняются Add (interval) и Delete (interval). Поэтому я хотел бы знать, как использовать это дерево, чтобы найти максимальное количество перекрывающихся интервалов в предпочтительном O (lg N) времени. – stackoverflowuser2010

+0

Можете ли вы определить перекрытие? То есть, вы имеете в виду набор интервалов с общей точкой или вы имеете в виду набор интервалов, так что между любыми парами существует пересекающийся путь? – Rafe

ответ

-1

Пример: look. Для этого вы можете использовать дерево интервалов. CGAL дает вам надежную реализацию для этого. Еще один интересный example похож на вашу проблему.

-1

вы можете найти дерево интервала, основанное на увеличенном балансировочном дереве AVL здесь: http://code.google.com/p/intervaltree/. он показывает вам, как это можно сделать. вы можете сделать то же самое с красно-черным деревом.

Смежные вопросы