Я читал несколько сообщений SO о деревьях KD и R-деревьях, но у меня все еще есть некоторые вопросы относительно моего конкретного приложения.
Для моего Java-приложения я хочу поддерживать относительно небольшое количество точек пространственных данных (несколько сотен тысяч). Ключевым моментом является то, что вставка данных не будет загружаться массово, а будет вставляться часто и поэтапно. Я также должен упомянуть, что я буду выполнять большое количество периодических запросов диапазона в подобластях пространственной области.
Я читал, что деревья K-D обычно не поддерживают инкрементное построение и что R-деревья больше подходят для этого, поскольку они поддерживают сбалансированное состояние.
Однако после изучения предложенных здесь решений: коммерческая реализация R-tree для Java?< /а>
Я не обнаружил, что с реализациями было легко работать для возврата списка точек при поиске по диапазону. Однако я обнаружил: http://java-ml.sourceforge.net/ для очень хорошая реализация дерева KD, которое работает быстро и превосходит стандартное хранилище массивов для тестового набора точек (~ 25 КБ). Кроме того, я читал, что R-деревья хранят избыточную информацию при работе с точками (поскольку точка представляет собой прямоугольник с min=max).
Поскольку я работаю с меньшим числом точек, являются ли различия между двумя структурами менее важными, чем, скажем, если бы я работал с приложением базы данных, хранящим миллионы точек?