我编写了一个红黑二进制统计树,以获得与红黑树中其他对象相当的任意对象的等级。我想知道是否有一个提供相同功能的API类。
如果给定一个等级,该类也有好处,该类具有在树中返回该等级的对象的函数。
请注意,红黑BST允许在log(n)时间内执行这两项操作,其中n是树中对象的数量。
答案 0 :(得分:2)
标准API没有订单统计树。 TreeMap
特别没有找到密钥等级或在O(log n)时间内按等级查找密钥的方法。
它看起来不像通常的附加库(Apache Commons Collections,Google Guava)也有订单统计树。
答案 1 :(得分:2)
查看http://algs4.cs.princeton.edu/33balanced/RedBlackBST.java.html。
教授。 Sedgewick将树命名为RedBlack,因此,很可能,它是RedBlack BST的正确实现。它也有等级(在O(lgN)中运行)。 (如果它支持删除,我不会冒险编写我自己的版本)。这至少是一个很好的参考。 (不在java.util alas中)
答案 2 :(得分:-1)
你重新发明了轮子。您可以使用TreeMap<YourClassAsKey, Long>
,因为TreeMap
由红色黑色BST支持,并使用Long
值作为计数器。
来自其javadoc:
基于Red-Black树的NavigableMap实现。
答案 3 :(得分:-1)
是的,有一个TreeMap:
基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。
此实现为containsKey,get,put和remove操作提供了有保证的log(n)时间成本。算法是Cormen,Leiserson和Rivest的算法导论中的算法的改编。
如果给定一个等级,该类也有好处,该类具有在树中返回该等级的对象的函数。
NavigableMap
接口(由TreeMap实现)提供floorKey
和ceilingKey
等方法。