O(nlogn) + O(n) 的时间复杂度是不是只是 O(nlogn)?

Posted

技术标签:

【中文标题】O(nlogn) + O(n) 的时间复杂度是不是只是 O(nlogn)?【英文标题】:Is a time complexity of O(nlogn) + O(n) just O(nlogn)?O(nlogn) + O(n) 的时间复杂度是否只是 O(nlogn)? 【发布时间】:2018-09-12 23:55:37 【问题描述】:

假设我有一个长度为n 的数组,我使用排序算法对它进行排序,时间为nlogn。得到这个排序后的数组后,我遍历它以找到任何具有线性时间的重复元素。我的理解是,由于操作是分开进行的,所以这将是时间O(nlogn) + O(n) 而不是O(nlogn+n)。如果是这样的话,nlogn 是否会超过线性时间复杂度,使最终时间复杂度为O(nlogn)

【问题讨论】:

你的直觉是正确的,但你的措辞不是很准确。我建议您阅读大 O 时间复杂度的定义,一旦您掌握了基本概念,您就会更加清楚。 O(m) + O(n) = O(max(m, n)) @0x499602D2 不完全是,如果 m 和 n 彼此独立(例如在 V 节点和 E 边上的路径查找),那么 O(m) + O(n) = O(m+n) @Budd 你是对的。那么O(f(n)) + O(g(n)) = O(max(f(n), g(n))) 会更准确吗? 对于大 n 复杂度将是 O(nlogn) 【参考方案1】:

是的,因为 log(n) > 1 表示大 n,所以 O(nlog(n)) 是 O(n) 的超集

【讨论】:

【参考方案2】:

O(nlogn) + O(n) 而不是 O(nlogn+n)

没有这样的事情; O(n log n) + O(n) 和 O(n log n + n) 相等,且都等于O( n 日志 n)。所以一个函数不可能在一个而不是另一个。

【讨论】:

以上是关于O(nlogn) + O(n) 的时间复杂度是不是只是 O(nlogn)?的主要内容,如果未能解决你的问题,请参考以下文章

O(1), O(n), O(logn), O(nlogn) 的区别

九大排序算法时间复杂度空间复杂度稳定性

算法 -- o, o(n), o(logn), o(nlogn)

归并排序

排序总结C++

o, o(n), o(logn), o(nlogn)算法复杂度