【发布时间】:2014-03-12 22:59:59
【问题描述】:
我发现的有关时间复杂度的资源不清楚何时可以忽略时间复杂度方程中的项,特别是对于非多项式示例。
我很清楚,对于 n2 + n + 1 形式的东西,最后两个术语是微不足道的。
具体来说,给定两个分类,2n 和 n*(2n),第二个的顺序是否与第一个相同?那里的额外 n 乘法重要吗?通常资源只是说 xn 呈指数增长并且增长得更快......然后继续前进。
我可以理解为什么它不会因为 2n 会大大超过 n,但是因为它们没有被加在一起,所以在比较两个方程时会非常重要,实际上是差异它们之间永远是 n 的一个因子,至少可以说这似乎很重要。
【问题讨论】:
-
在我看来,鉴于 NLogN 被认为严格比 N 慢,但大多数人并不真正关心多少,可以肯定地说 N2^N 比 2^N 慢,但还不够“慢”让人们关心..
-
@tobias_k,我理解这一点,但考虑 O(n!) 的例子。额外的 n 项真的会有所不同吗? O(n!) 到 O(n*n!) 就像 O(n!) 到 O((n+1)!) 也就是同一个图简单地移动了。但是增长是一样的……在这种情况下,即使一个严格来说很大,增长是不同的吗?这不是时间复杂度所关心的吗?
-
@JackWu 但大多数人并不真正关心多少,除非您必须使用 nlogn 而不是 n 对数亿条记录进行排序 :)
-
其实
n! = o((n+1)!),也就是严格渐近地增长缓慢。 -
请注意,这与复杂性理论无关,它“只是”关于渐近线。另外,这种问题在Computer Science 上可能会更好。
标签: algorithm big-o complexity-theory time-complexity