algorithm - 为什么在平均情况下链排序 O(n sqrt n)?

标签 algorithm sorting complexity-theory time-complexity

我找到了 strand sort对常量空间中的单向链表进行排序非常有吸引力,因为它比例如插入排序快得多。

我明白为什么它在最好的情况下是 O(n)(列表已经排序)而在最坏的情况下是 O(n^2)列表被反向排序)。但是为什么在一般情况下 O(n sqrt n) 呢?如果算法不是基于二分法并且具有多项式最佳情况和最坏情况性能,则平均情况是否只是 O(n^m),其中 m 是算术平均值最好情况和最坏情况的指数 (m = (1 + 2)/2 = 3/2, O(n sqrt n) = O(n^(3/2) ))?

最佳答案

Strand 排序的原始引用是 http://groups.google.com/group/fido7.ru.algorithms/msg/26084cdb04008ab3 ...据此,它是 O(n^2)。 Strand 排序作为 J 排序的一个组成部分提出,它声称它是 O(n lg n)。平均复杂度为 O(n^2) 是有道理的,因为在随机数据中,一半的链长度为 1,并且 O((n/2)^2) = O(n^2)。

关于algorithm - 为什么在平均情况下链排序 O(n sqrt n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579786/

相关文章:

algorithm - 如何理解背包问题是NP完全的?

java - if 语句的大 O 表示法?

c++ - 从 vector 中删除最小的非唯一值

一个集合的所有可能集合列表的算法

c - 扫雷游戏

c++ - 将整数分配给 std::vector 中已排序的唯一元素

Excel VBA 函数根据范围内的单元格背景颜色返回 True 或 False

java - 如何将集合排序为列表

algorithm - 使用有限的内存将多个文件从一个驱动器移动到另一个驱动器

c - 使用递归算法反转链表