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

标签 algorithm sorting asymptotic-complexity

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

为什么我们不忽略 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),与您排序的列表数量无关。 (即瓶颈不再在插入阶段,而是在合并阶段。)

关于algorithm - 我们应该忽略 O(nk) 中的常量 k 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188732/

相关文章:

c - 如何在不更改原始数组或分配新数组的情况下对两个数组进行排序?

algorithm - 复杂性理论中的 O(lg(n)) * O(lg(n))

algorithm - 在 O(nlog*n) 和 O(n) 之间?

algorithm - 这个算法会在 O(n) 内运行吗?

c# - 让 Levenstein 的距离算法满足我的需要

database - 同时访问数据库资源的算法

c# - 对文本框对象列表进行排序

ios - 排序 nsfetchedresultscontroller

java - 最大和连续子数组(面试题)

algorithm - 流式 JSON 算法 - 没有堆栈