Рассмотрим большой набор интервалов с плавающей запятой в одномерном пространстве, например
[1.0, 2.5], 1.0 |---------------|2.5
[1.5, 3.6], 1.5|---------------------|3.6
.....
Требуется найти все интервалы, содержащие данную точку. Например, для point = 1.2 алгоритм должен возвращать первый интервал, а если задан point = 2.0, он должен возвращать первые два интервала в приведенном выше примере.
В проблеме, с которой я сталкиваюсь, эту операцию нужно повторять большое количество раз в течение большого количества интервалов. Следовательно, поиск методом перебора нежелателен, и производительность является важным фактором.
После поиска я увидел, что эта проблема решается с помощью списка пропуска интервалов в контексте вычислительной геометрии. Мне было интересно, есть ли какая-нибудь простая и эффективная реализация на C ++.
РЕДАКТИРОВАТЬ: Чтобы быть более точным в проблеме, существует N интервалов, а для M точек следует определить, какие интервалы содержат каждую точку. N и M - большие числа, где M больше N.