Мне нужна реализация IntervalTree или RangeTree на Java, и у меня проблемы с поиском с поддержкой рабочего удаления.IntervalTree DeleteNode Java Implementation
Там есть встроенный в один в sun.jvm.hotspot.utilities.IntervalTree, но метод deleteNode в суперкласса состояний RBTree:
/**
* FIXME: this does not work properly yet for augmented red-black
* trees since it doesn't update nodes. Need to figure out exactly
* from which points we need to propagate updates upwards.
*/
Попытка удалить узлы из дерева заканчивается бросать исключение:
узла максимальная конечная точка не была обновлена должным образом
Насколько сложно было бы оперативно реализовать функцию delete
в подклассе sun.jvm.hotspot.utilities.IntervalTree? Или есть еще одна реализация Interval Tree, которая уже реализует это правильно?
В настоящее время я просто уничтожаю дерево и повторно заполняю его каждый раз, когда есть удаление, которое далеко от идеала (примечание: установка DEBUGGING = false в RBTree ускорило ситуацию).
Спасибо за ссылку, Yishai. Я смотрю на документы http://olduvai.sourceforge.net/tj/tj-javadoc-public/TreeJuxtaposer/RangeTree.html и не вижу способа получить список узлов для диапазона или изменить дерево после создания. Также похоже, что в проекте GUI, с которым они его используют, наблюдается некоторая зависимость. Я предполагаю, что это очень специфично для потребностей этого проекта, а не для RangeTree общего назначения. Вы использовали эту реализацию? –
@ Сэм, нет, я его не использовал. Это была просто альтернатива, которую я мог найти. Поскольку он является открытым исходным кодом, он может дать вам лучшую основу для начала, чем подклассификация реализации солнца. – Yishai