【发布时间】:2011-08-23 19:38:39
【问题描述】:
假设您有一个神奇的数据结构,它表示元素的线性序列,支持在最坏情况 O(1) 时间内查找、插入和删除任何索引。 (我很确定,鉴于现代机器的内存模型,不可能有这样的结构,但我们假设我们有一个有趣的结构)。
我的一个朋友指出,如果你有这个数据结构,那么你可以为整数构建一个很酷的排序算法,它在预期的 O(n lg lg n) 时间内运行,如下所示。首先,创建上面提到的一种神奇的数据结构。接下来,对于输入数组中的每个元素,使用插值搜索在预期的 O(lg lg n) 时间内找到该元素所属的魔法数组中的索引,然后在 O(1) 时间内插入该元素。最后,在 O(n) 时间内,读取排序后的魔法数据结构。这使得 n 次调用 O(lg lg n) 插值搜索,这将在 O(n lg lg n) 时间内运行。
我知道,上述方法不会给最坏情况 O(n lg lg n) 时间进行排序,因为存在病态错误的输入数组,如果用于插值搜索会将搜索退化为 O(n2) 时间。我的问题是,鉴于这种神奇的数据结构,可以构建最快的整数排序算法,假设我们只关心算法的最坏情况运行时?
(这可能更适合 cstheory,但我想我会先在这里问,因为我过去得到了一些很棒的算法答案。)
【问题讨论】:
-
如果我被允许使用魔法数据结构,我会使用一个总是预先排序的。那么排序将是一个
O(1)操作。 -
这个问题似乎离题了,因为它是关于一个理论 CS 结构,而不是一个实际的编程问题。
标签: algorithm sorting data-structures