我目前有数据需要以两种不同的方式排序,从时间和空间复杂度PoV,是否可以选择维护两棵树,一种是按日期排序,一种是按ID号排序?我需要能够按照数据的顺序返回列表,并按ID返回单个用户,我宁愿不必遍历甚至更糟,遍历然后对数组返回进行排序。
非常感谢任何见解或帮助,谢谢!
答案 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放置值。