经二分模型在O(n)中是否可以进行整数排序?


9

据我所知,不存在可以解决以下问题的最坏情况算法:O(n)

给定长度为的序列,该序列由有限整数组成,请找到每个元素小于或等于其后继元素的排列。n

但是在跨二分法的计算模型中是否存在不存在的证据?


请注意,我并没有限制整数的范围。我也不将解决方案限制为比较排序。


据我所知,SAT 可能有一个时间算法!所以答案是否定的。O(n)
Lembik

5
AFAIK,这仍然是一个未解决的问题。
Juho 2015年

2
我不知道是否会有一个有意义的答案,除非您指定使用的是哪种计算模型,因为您不会将计算机局限于比较和交换。只用RAM和两个数的比较,从熵的参数给出一个时间限制,即使对于transdichotomous计算机。通常,如果排序不是基本操作,而不是交换和比较,则可以在Θ 1 )中完成。如果在正确的位置插入整数是基本运算,则Θ n Ω(nlog(n))Θ(1)Θ(n)。您是否有特定的超越比较交换模型?
Lieuwe Vinkhuijzen

2
@LieuweVinkhuijzen我的问题指定了跨二分法的计算模型。用简单的英语来说:一种计算模型,其中机器的字大小足以容纳问题的任何整数。因此,比较任意两个整数为O(1),对它们进行加,乘等运算也是如此。在这种计算模型中,熵界限已被克服,请参见Han,Yijie(2004),“在O(n log log n)时间和线性空间中进行确定性排序”
orlp 2015年

@orlp我明白了;如果您利用整数的结构,则可以克服熵的界限。我不知道整数排序;我一定会继续阅读该主题!
Lieuwe Vinkhuijzen

Answers:


4

O(n)O(1)n[1,nc]

几年前,包括已故的米海·帕特拉库(Mihai Pătrașcu)在内的一个团队才展示了这一点(这会让不熟悉他的作品的人感到惊讶)。这是一个了不起的结果,令我惊讶的是,更多的人不知道这一点,因为这意味着(理论上)解决了对整数排序的问题。

如果允许您修改密钥,则有一种实用的算法(如上文所述)。基本上,压缩排序的整数比压缩未排序的整数要多,并且您获得的额外空间恰好等于进行基数排序所需的额外内存。它们还给出了不切实际的算法,该算法支持只读密钥。


1
lognO(n)

@orlp论文中的第三个算法讨论了无限长整数。
别名

1
c

3
原谅我,但是在目前的状态下,这个答案根本无法回答问题。我明确提到整数不受限制。这个答案解决了一个完全不同的问题。
orlp

1
现在的最后一点不再是小字体了:)
orlp

-1

O(bn)bn

如果整数的大小没有上限,那么我不认为有任何已知的线性时间排序算法。


5
欢迎!您说的是完全正确的,但我认为它不能回答问题。这个问题专门要求证明在特定的计算模型中不存在所需的算法。仅说不知道这样的算法并不能证明不存在。
David Richerby '16

实际上,b在我们的问题中是一个常数,我认为该算法在o(n)中
RFC 2549,2016年

2
bnO(n)o(n)

是的,绝对是错字;)在他的问题中,由于您假设一个数字适合长度为b的单词,因此它变成一个常数。
RFC 2549

1
这并不是使字长恒定。(否则,就没有理由明确地假设“在单个词的操作需要一定的时间每个操作。”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.