我需要一个IntervalTree在Java或RangeTree落实,我无法找到一个工作与支持删除。
有一个内置的一个在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的子类的功能? 还是有另一种其已正确实现此区间树的实现?
目前,我只是擦了树,每有一个缺失,这是很不理想的时间重新填充它(注:设置调试=在RBTree假加快事情了极大)。
我结束了修改sun.jvm.hotspot.utilities.IntervalTree
维护一组删除节点。 在做搜索,我排除这个集合中的任何项目。 不理想,但是这是不是让“真正的”删除工作轻松了许多。 一旦删除组变得太大,我重建树。
这个项目有一个RangeTree实施,可能是更多地利用你的。 阳光包可能是好的快速和肮脏的使用,但我不会推荐任何建设的重要依靠它们。 Sun可能不会保持它的稳定性。
我不知道您的具体要求,但非静态段树可能会为你工作。 如果是这样,看看布局管理SW ,特别是线段树包 。 它拥有你需要的移除特征。
如果您决定推出自己的,我可能会建议开源呢? 我很惊讶,没有一个开放的,易于区间树可用了。
有基于增强AVL树@#交流实施http://code.google.com/p/intervaltree/ 。 翻译到Java应该不会太困难。
我发现删除的开源实现,但它neeeds一些努力才能使其充分发挥作用。
这是更大的开放源码项目的模块Gephi ,但这里的来源和javadoc的 。 如果你想有一个罐子,你可以安装Gephi,并且它在:
/gephi/modules/org-gephi-data-attributes-api.jar
删除方法有,将删除与输入间隔(而不是只在输入的一个)重叠的所有间隔。 但是我在soruces发现有该删除特定的节点(其存储一个间隔)私有方法。 另外,私人搜索方法返回的节点。
因此,我认为一些小的努力有可能重构代码,并有这样的 - “删除特定的时间间隔”功能。 最快和最肮脏的方式是只让私有方法/ Node类公众。 但因为它是一个开源项目,也许它可能演变在未来进入一些好的标准实施的时间间隔树。