两个AVL树的替代品

时间:2017-02-28 21:19:22

标签: java performance avl-tree data-storage

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

TreeMap实现Red-Black tree,它是AVL的替代品。

答案 2 :(得分:0)

您可以使用一个LinkedHashMap(按照添加或last access +所有标准HashMap操作的顺序存储和检索对象,其中O(1)复杂度)。

如果您需要更复杂的日期访问模式(范围,点查询),您可能会使用相同的想法,但使用skip list而不是链接列表。在这种情况下,按日期访问将是O(logN)。

然后还有一个选项可以在树上建立相同的(链表或跳过列表),您可以按ID放置值。