合并排序与基数排序:在特殊情况下合并排序采用O(n(log n)^ 2)时间?

时间:2016-03-13 04:50:00

标签: algorithm sorting time mergesort radix-sort

关于Radix排序的效率我是reading与基于比较的排序算法相比,我发现了这篇文章:

  

例如,考虑自下而上的合并排序。第一遍将比较成对的随机密钥,但最后一遍将比较排序顺序非常接近的密钥。这使得在此类输入上进行合并排序需要O(n(log n)2)时间。

有人可以帮我理解O(n (log n)2)部分吗?

1 个答案:

答案 0 :(得分:1)

假设常数比较时间== O(1),则合并排序为O(n log(n))。假设比较时间为O(log(n)),则合并排序为O(N(log(n))^ 2)。这里的假设基于n个不同密钥的最小密钥大小,即log2(n)位。但是,密钥大小通常独立于n,并且是常量,或者一组n个元素中所有密钥的平均大小将是常量,在这种情况下,时间复杂度为O(n log(n))。

正在提出的更多关于基数排序,其中通过次数取决于密钥分成多少部分。例如,如果密钥是64位,并且基数排序一次完成4位,则需要16次传递。如果密钥大小为28个字符,并且基数排序每次完成1个字符,则需要28个字符。如果考虑n个不同密钥的最小密钥大小,即log2(n)位,并且如果一次按8位排序,则需要log256(n)次通过。例如,排序2 ^ 32个密钥,意味着密钥的大小为32位,并且一次按8位排序将需要4​​次通过。对于2 ^ 64个密钥,每个密钥为64位,8个密钥。