Учитывая набор интервалов, найдите интервал, который имеет максимальное количество пересечений

учитывая набор интервалов, найдите интервал, который имеет максимальное количество пересечений (а не длину конкретного пересечения). So if input (1,6) (2,3) (4,11), (1,6) должен быть возвращен. Некоторые предлагают использовать дерево интервалов, чтобы сделать это в O(nlogn), но я не понял, как построить и использовать дерево интервалов после прочтения его вики-страницы. Я считаю, что это можно сделать, выполнив какой-то алгоритм сортировки и сканирования. Если Interval tree является единственным вариантом, пожалуйста, обучите мне, как построить / использовать его. Спасибо.

2 ответов


Примечание: алгоритм David Eisenstat имеет лучшую производительность, чем этот.

простой алгоритм плоской развертки сделает это в O(nlogn + m*n), где m - максимальное количество пересечений с любым интервалом.

сортировка конечных точек интервала. Следите за активными сегментами. При достижении начальной точки увеличьте число пересечений всех активных интервалов и задайте для нового интервала число пересечений, равное числу активных интервалов. интервалы (исключая себя). При достижении конечной точки удалите интервал из активных интервалов.


Не используйте дерево интервалов. Создайте событие для каждой конечной точки интервала, чтобы каждый интервал имел событие start и событие stop. Обрабатывать эти события по порядку. (Порядок начинается до остановок, если пересечение мера-ноль считается пересечением, или останавливается до начала иначе.)

инициализировать карту C от интервалов до чисел. Инициализируйте начальное число s = 0 и стоп-число t = 0. Чтобы обработать начальное событие для интервала i, установите s = s + 1, а затем C(i) = - (t + 1). К обработайте событие stop для интервала i, установите t = t + 1, а затем C (i) = C(i) + s.

в конце C отображает интервалы до их пересечений. Этот алгоритм O (N log n) из-за сортировки; это время работы оптимально, если конечные точки могут быть добавлены и сравнены только с помощью довольно стандартных методов вычислительной геометрии.