Algorithm 是否有平衡的BST,每个节点保持子树大小?
是否有一个平衡的BST结构也跟踪每个节点中的子树大小 在Algorithm 是否有平衡的BST,每个节点保持子树大小?,algorithm,data-structures,tree,binary-search-tree,Algorithm,Data Structures,Tree,Binary Search Tree,是否有一个平衡的BST结构也跟踪每个节点中的子树大小 在Java中,TreeMap是一棵红黑树,但不提供每个节点的子树大小 以前,我确实编写了一些BST,可以跟踪每个节点的子树大小,但它并不平衡 问题是: 在基本操作保持(O(lg(n))效率的同时,是否可以实现这样一个树 如果是,那么是否有任何第三方库提供此类impl? 一个Javaimpl很好,但是其他语言(例如c,go)也会有帮助 顺便说一句: 子树大小应在每个节点中保持跟踪。 这样就可以在不遍历子树的情况下获得大小 可能的应用:
Java
中,TreeMap
是一棵红黑树,但不提供每个节点的子树大小
以前,我确实编写了一些BST,可以跟踪每个节点的子树大小,但它并不平衡
问题是:
- 在基本操作保持(
效率的同时,是否可以实现这样一个树O(lg(n))
- 如果是,那么是否有任何第三方库提供此类impl?
一个
impl很好,但是其他语言(例如Java
,c
)也会有帮助go
- 子树大小应在每个节点中保持跟踪。
这样就可以在不遍历子树的情况下获得大小
- 跟踪项目的排名,其值(排名取决于)可能会动态变化
- 通用(参数化)键,值映射
- 在O(log(N))时间内插入(add)、查找(get)和删除(del)
- 键顺序迭代器(inorder和revorder)
- 按O(log(N))时间内从开始或结束(getNth)的相对位置进行查找
- 按O(log(N))时间键获取位置(秩)
- 使用树键的高效集合操作
- 映射扩展以设置具有可选值合并控件的操作,用于重复项
- 树(也称为Adams树或有界平衡树)在每个节点中保持子树大小
这也使得在log(n)时间内从开始或结束查找第n个元素成为可能
我的。它具有以下特性:
不幸的是,我不认为有任何标准的库实现,但是如果您寻找它,您可以找到开源。您可能需要自己滚动。这是否也允许重复值?我的意思是,我们可以在每个节点上存储多重性吗?树中每个唯一键只有一个实例,尽管您可以选择将每个键上的值实现为列表或设置以获取多个值。