最糟糕的shell排序场景:Θ(N ^ 3/2)或O((NlogN)^ 2)?

时间:2017-10-12 16:53:11

标签: sorting time-complexity asymptotic-complexity

我正在寻找Shell排序的最坏情况。 根据{{​​3}},最糟糕的情况是O(N^3/2) 但是this,声称最糟糕的情况是O((N log N)^2))

我认为最坏的情况应该是一个包含奇数位置最大值的序列。但是,here引入了一些Θ(N^3/2)复杂度的差距序列。

我想弄清楚Shell排序的最坏情况是什么。到目前为止,根据前面提到的论文,最坏的情况是O((N log N)^2))而不是Θ(N^3/2)。此外,here提出了最糟糕的情景分析,显然不是Θ(N^3/2)

here,对某种算法进行时间复杂度分析,O(N^2)为最差情况。

但是,我完全迷失了。 Shell排序的最坏情况是什么?

1 个答案:

答案 0 :(得分:1)

看起来好像只有一个" Shellsort",但是一系列排序函数通过所谓的间隙序列进行参数化。 Shellsort通过多次h排序列表来减少h的值。使用的h序列决定了Shellsort的表现。一些序列给出O(N ^ 3/2),一些给出O(N ^ 2),其他给出O(N log ^ 2 N)等。

您看到的每个参考值都使用不同的间隙序列来推导它们的渐近边界。

编辑:考虑最差的可能差距序列(不重复)nn-1n-2,...,1。要获得运行时:

h    sublists sublist size    comparisons
n    n        1 (n)           0
n-1  n-1      1 (n-2), 2 (1)  1
n-2  n-2      1 (n-4), 2 (2)  2
...
n/2  n/2      2 (n/2)         2n
...
n/3  n/3      3 (n/3)         3n
...
n/4  n/4      4 (n/4)         4n
...
n/n           n (1)           n^2

所以答案将是n(1 + 2 + ... + n)= n ^ 2(n + 1)/ 2或O(n ^ 3)。这就是我所认为的最大可能的复杂性将是间隙严格减少间隙序列(不严格减少的间隙序列不是很有趣,因为那些可能是任意的坏)。