【发布时间】:2011-02-05 07:57:35
【问题描述】:
我正在寻找一种类似于 CLR 中的红黑区间树的区间树算法,但它默认支持区间合并,因此不会有任何重叠区间。
换句话说,如果您有一棵包含两个区间 [2,3] 和 [5,6] 的树,并且添加了区间 [4,4],那么结果将是一棵仅包含一个区间 [2,6] 的树].
谢谢
更新:我正在考虑的用例是计算传递闭包。间隔集用于存储后继集,因为它们一直是found to be quite compact。但是,如果您将区间集表示为链表,我发现在某些情况下它们会变得非常大,因此找到插入点所需的时间也是如此。因此我对区间树感兴趣。此外,可能会有很多将一棵树与另一棵树合并(即一组 OR 操作) - 如果两棵树都很大,那么使用两棵树的中序游走而不是重复插入每个间隔来创建一棵新树可能会更好。
【问题讨论】:
-
我已经删除了我的答案,因为我愚蠢地忽略了一些案例。它仍然可以修复,但会变得更加复杂。无论如何,由于您更新说您将主要合并整个树,因此答案似乎不再有用,因为按顺序遍历会更快。
-
哦,好的。有时我会合并两棵大树,而 inorder 可能会更快,但更多时候我会将一棵小树添加到一棵大树中。
标签: algorithm intervals red-black-tree interval-tree