Если вы хотите очень простое решение, попробуйте следующее:
держать ключи, упорядоченные по х;
заданный диапазон запросов, найдите первую точку в диапазоне x по дихотомии;
петля на x до конца диапазона x и проверка на y.
Предполагая, что ваши ключи равномерно распределены, если х-диапазон занимает фракция Fx всей области является ускорение по сравнению с перебором является 1/Fx (не 1/Fx.Fy, к сожалению).
Несмотря на то, что выигрыш может выглядеть незначительным, его следует реализовать, чтобы сравнить его с исчерпывающим поиском и любым более сложным методом, который вы могли бы попробовать.
Другим простым решением является гриддинга, т.е. сохранение точек в связанных списках, ассоциированных с каждой ячейки сетки. Затем поиск может быть ограничен ячейками, которые перекрывают диапазон.
Вам нужно будет найти хороший компромисс по размеру ячейки; ячейки, намного превышающие типичный размер диапазонов, являются неэффективными; но клетки настолько маленькие, что большинство из них пустые, также неэффективны.
quad-tree Структура данных можно рассматривать как адаптивную версию сетки.
Можете ли вы поделиться тем, что вы пробовали до сих пор. Кроме того, какие типы данных являются x, y и z? –
Вы также можете предоставить образцы данных того, что вы хотите выполнить. –
Дерево kD - ваш друг. http://geom-java.sourceforge.net/demos/drawRangeKDTreeDemo.html –