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

Should we ignore constant k in O(nk)?

当我遇到这个时正在阅读 CLRS:

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

在这种情况下,您考虑的不是单个算法的 运行 时间,而是 系列k 参数化的算法的时间。考虑 k 可以让您比较排序 n/n == 1 列表和 n/2 2 元素列表之间的区别。在中间某处,有一个 k 的值,您要为部分 (c) 计算它,以便 Θ(nk + n lg(n/k)) 和 Θ(n lg n) 相等.

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

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