Скажем, [a, b] представляет интервал на реальной линии от a до b, a < b включительно (т.е. [a, b] = множество всех x таких, что a < = x < = b). Кроме того, скажем, [a, b] и [c, d] являются «перекрывающимися», если они разделяют любое x, так что x находится в обоих [a, b] и [c, d].поиск интервального перекрытия в списке интервалов?
Учитывая список интервалов ([x1, y1], [x2, y2], ...), что является наиболее эффективным способом нахождения всех таких интервалов, которые перекрываются с [x, y]?
Очевидно, что я могу попробовать каждый и получить его в O (n). Но мне было интересно, могу ли я сортировать список интервалов каким-то умным способом, я мог бы найти/один/перекрывающий элемент в O (log N) через двоичный поиск, а затем «оглянуться» с этой позиции в списке, чтобы найти все перекрывающиеся интервалы. Однако как мне сортировать интервалы, чтобы такая стратегия работала?
Обратите внимание, что в элементах списка могут быть перекрытия между элементами, что и делает это трудным.
Я пробовал, сортируя интервалы по их левому краю, справа, по середине, но ни один из них не ведет к исчерпывающему поиску.
Помощь?
+1 так как это сделало мой рабочий день немного интереснее. –