我正在寻找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排序的最坏情况是什么?
答案 0 :(得分:1)
看起来好像只有一个" Shellsort",但是一系列排序函数通过所谓的间隙序列进行参数化。 Shellsort通过多次h排序列表来减少h的值。使用的h序列决定了Shellsort的表现。一些序列给出O(N ^ 3/2),一些给出O(N ^ 2),其他给出O(N log ^ 2 N)等。
您看到的每个参考值都使用不同的间隙序列来推导它们的渐近边界。
编辑:考虑最差的可能差距序列(不重复)n
,n-1
,n-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)。这就是我所认为的最大可能的复杂性将是间隙严格减少间隙序列(不严格减少的间隙序列不是很有趣,因为那些可能是任意的坏)。