为什么二进制插入排序不能为O(n log n)?

时间:2018-02-17 18:32:37

标签: insertion-sort

在我看来,我们只是缺少必要的硬件。具体来说,在内存中设计列表结构并不是不可想象的,当你将值写入元素a时,这导致一些信号从0变为1,导致它先前将a的值写入a + 1( a的输出自动连接到+ 1的输入,你只需要增加一些东西来触发写入),并且这个传播速度非常快(比执行其他操作要快得多),因此大致有一个O(n log n)算法(当然,当你得到非常大的n时,这个传播需要n次,所以它仍然是一个O(n ^ 2)算法,但在我看来,对于小n,这个应该是可能的。

1 个答案:

答案 0 :(得分:0)

Big-O符号与速度本身无关。本质上,它捕获函数的渐近行为。如果该函数描述了算法的运行时间,则Big-O表示法描述了它的渐近增长顺序。

  

当然,当你得到非常大的n时,这个传播需要n次,所以它确实是一个O(n ^ 2)算法

这没有意义。插入排序的时间复杂度不依赖于输入大小;运行时间可能会有所不同,具体取决于具体输入,但插入排序仍然分别为最佳或最差情况下运行Ө(n)或Ө(n²)。

请注意,如果算法在T(n)=n²+ 2 100 中运行,则仍为O(n²)。如果算法为你做O(n²)并且之后计算pi的前十亿个数字,它仍然是O(n²),前提是后面的计算独立于输入大小n

最后,引用Cormen等人的算法导论,3 rd

  

在我们分析算法之前,我们必须有一个模型   我们将使用的实现技术,包括模型   该技术的资源及其成本。

在评估算法的运行时间之前,您需要就将要使用的计算机的一般模型达成一致。因此,硬件考虑因素是该协议的一部分。