我们应该忽略O(nk)中的常数k吗?

时间:2017-11-08 20:06:45

标签: algorithm sorting asymptotic-complexity

当我遇到这个时正在阅读CLRS: enter image description here enter image description here

为什么我们不忽略a中大o方程中的常数k。 ,b。和c。?

2 个答案:

答案 0 :(得分:3)

在这种情况下,您不是考虑单个算法的运行时间,而是考虑由k参数化的算法的系列。考虑k,您可以比较排序n/n == 1列表和n/2 2元素列表之间的差异。在中间某处,您想要为(c)部分计算k的值,使得Θ(nk + n lg(n / k))和Θ(n lg n)相等。 / p>

更详细地说,插入排序是O(n ^ 2),因为(粗略地说)在最坏的情况下,任何单个插入都可能花费O(n)时间。但是,如果子列表具有固定长度k,那么您知道插入步骤为O(1),与您要排序的列表数无关。 (也就是说,瓶颈不再是插入步骤,而是合并阶段。)

答案 1 :(得分:1)

当您使用不同的k值比较不同的算法时,K不是常数。