【问题标题】:Red Black tree or AVL tree implementation in JavaJava中的红黑树或AVL树实现
【发布时间】:2012-08-20 18:22:40
【问题描述】:

Java collections/Guava/Apache Commons library 中是否有 Red Black Tree /AVL Tree data 结构实现?如果是的话,你能把它们指给我看吗?基本上我正在寻找一个数据结构,查询应该在 O(lg n) time 发生。数据结构也会有一些更新,但不会像查询那样频繁。

【问题讨论】:

  • 一个好的旧哈希表有什么问题?
  • @delnan 是的 hashTable 可能是其中一种选择。我更喜欢像 ConcurrentHashMap 这样的基于哈希的映射,但我仍然想知道这些常用库中是否存在这两种平衡的 BST 数据结构中的任何一种。
  • 如果您只需要一张地图(或集合),那么请选择HashMap,因为它更快(O(1) 有一个小因素)。忘记HashTable,因为它已经过时了。如果你需要并发,请采取ConcurrentHashMap。如果您需要订购,请选择TreeMap,不要在意它是 RB-Tree 或 AVL-Tree 或 Splay-tree 之类的。如果您需要其他内容,请扩展您的问题。
  • 我的意思是,Guava 的TreeMultiset 在内部使用了 AVL 树...
  • @LouisWasserman 感谢提及 TreeMultiset

标签: java data-structures collections tree guava


【解决方案1】:

基本上我正在寻找查询应该在其中的数据结构 发生在 O(lg n) 时间

使用TreeMap。它由Red-Black tree 支持,所以它的访问时间是O(logN)(我强调下面的引用)

公共类 TreeMap
扩展 AbstractMap 实现
NavigableMap,可克隆,可序列化

基于红黑树的 NavigableMap 实现。地图已排序 根据其键的自然顺序,或通过比较器 在地图创建时提供,具体取决于使用的构造函数。

此实现为 containsKey、get、put 和 remove 操作。

【讨论】:

  • 抱歉吹毛求疵,但要清楚的是自然底数的对数底数(即 e=2.718281828。)还是简单地以 2 为底,即 lg n?
  • Base 2.为什么会是lnN
  • 因为二进制对数通常用 lg n 表示。这是传统的符号,我相信。
  • 如果是O(log n),那么对数的底是无关紧要的,因为底的变化只涉及常数因子差。
  • @Geek 通常在谈论算法时 log(x) 是 log base 2,除非另有说明。即使没有,正如 Louis Wasserman 所说,这种变化大多是无关紧要的。
猜你喜欢
  • 2012-11-30
  • 2017-07-24
  • 2013-04-21
  • 2015-03-06
  • 2016-03-18
  • 2019-07-09
  • 2012-11-21
  • 2012-11-22
  • 1970-01-01
相关资源
最近更新 更多