Если у меня большой набор непрерывных диапазонов (например, [0..5], [10..20], [7..13], [- 1..37]) и я могу расположить эти наборы в любой мне нравится структура данных, Какой самый эффективный способ проверить , к которому устанавливает конкретный номер test_number?
Я думал о хранении наборов в сбалансированном двоичном дереве на основе малого количества набора (и каждый узел будет иметь все наборы, которые имеют одинаковое наименьшее число своего набора). Это позволит вам эффективно сократить количество наборов в зависимости от того, меньше ли test_number, который вы тестируете с наборами, меньше самого низкого номера набора, а затем сократить этот узел и все узлы справа от этого узла (что иметь в своем диапазоне меньшее число, которое больше номера_теста). Я думаю, что это должно было бы сократить в среднем около 25% наборов, но тогда мне нужно было бы линейно просмотреть все остальные узлы в двоичном дереве, чтобы определить, принадлежал ли test_number этим наборам. (Я мог бы дополнительно оптимизировать, сортируя списки наборов в любом узле по наибольшему числу в наборе, что позволило бы мне выполнять бинарный поиск в определенном списке, чтобы определить, какой набор, если таковые имеются, содержит номер_тестера. К сожалению, большинство наборы, с которыми я буду иметь дело, не имеют перекрывающихся границ множества.)
Я думаю, что эта проблема была решена в графической обработке, так как они нашли способы эффективно проверить, какие полигоны во всей их модели вносят вклад в определенный пиксель, но я не знаю терминологию этого типа алгоритма.