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) 的区别