【发布时间】:2015-07-01 13:04:39
【问题描述】:
有没有一种数据结构可以在O(n)中同时按插入顺序和数量级遍历,最多O(log(n))次插入和删除?
换句话说,给定元素 5、1、4、3、2(按此顺序插入),可以在 O(n) 时间内以 1,2,3,4,5 或 5,1,4,3,2 的形式遍历它。
当然,我可以使用数组并在遍历之前简单地对其进行排序,但这需要 O(n*log(n)) 预遍历步骤。另外,我可以使用多链表来实现 O(n) 的遍历,但是在这种情况下插入和删除操作也会花费 O(n),因为我不能保证最新的元素一定是最大的。
如果存在这样的数据结构,请给我一个正式的名称,以便我可以进一步研究它,或者如果它没有,一个简短的表面级描述将不胜感激。
谢谢
【问题讨论】:
-
列表+二叉搜索树呢?
-
如果存在这样的结构,我会感到惊讶。您当然可以简单地构建两个排序树,例如,或者一个排序树和一个链表。
-
@DavidEisenstat 是的,我也在考虑同样的思路,但我不确定如何连接它们,以便当我从一个元素中删除一个元素时,它将在 sub 中从另一个元素中删除-O(n) 时间。
-
@G.Bach 我也是,但我想我会问一下以防万一。
-
树和列表组合实际上可能有效,但我需要注意如何链接元素。