【问题标题】:An alternative to two AVL trees两个 AVL 树的替代方案
【发布时间】:2017-02-28 21:19:21
【问题描述】:

我目前有我需要以两种不同方式排序的数据,从时间和空间复杂性 PoV,是否有任何替代方法来维护两棵树,一棵按日期排序,一棵按 ID 号排序?我需要能够按数据顺序返回列表,并按 ID 来返回单个用户,而且我宁愿不必遍历,甚至更糟的是,遍历然后对数组返回进行排序。

非常感谢任何见解或帮助,谢谢!

【问题讨论】:

    标签: java performance avl-tree data-storage


    【解决方案1】:

    您可以在一棵树中执行此操作,但您只能在该日期获得 O(logN) 性能。无论如何,ID 直接检索将是 O(N)(即遍历整个树以找到完全匹配),因为顺序是不确定的。

    如果您的 ID 可以基于您需要的日期(我的意思是如果可以根据日期生成 ID) - 那么您可以将 O(N) 时间复杂度降低到 O(logN + M),其中M - 是特定日期的 ID 子集。

    因此,根据您的响应时间和内存要求,您可以只保留一棵树,或将其与 ID 的 HashMap 配对。

    【讨论】:

    • 感谢您的回复,我得到了不受我控制且令人讨厌的无序的 id 和日期,否则根据日期生成是个好主意。我想我会坚持使用两棵树,因为内存不确定性是制作哈希图的一个因素,我可能需要调整几次大小,而且时间不会好太多。
    • @HarrisonW。不客气 :-) 我仍然建议您使用树和哈希图,因为即使多次插入 + 调整哈希图的大小也会胜过插入平衡树。
    【解决方案2】:

    TreeMap 实现 Red-Black tree,这是 AVL 的替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多