算法的时间复杂度

时间:2015-04-29 11:19:41

标签: time-complexity complexity-theory

我对时间复杂度有疑问。如果它的真或假,我真的不明白如何获得。 有人能告诉我如何找到结果吗?请向新手解释一下。

以下是一些例子:

  1. n log n = O(n^2) true - false?
  2. 2n – 3 = Θ(n) true - false?
  3. n^2 + 3 = Ω(n^3) true - false?
  4. 2n log n – 3n = O(n) true - false?
  5. n^2 + 5n – 6 = Θ(n^2) true - false?

2 个答案:

答案 0 :(得分:0)

这看起来像是家庭作业,所以我将解释整个图片,并举一个例子:

f and g are functions, M is a positive constant, xi and xo are determined initial values.
f(x) = O(g(x)) iff |f(x)| <= M|g(x)| for all x > xi
f(x) = Ω(g(x)) iff |f(x)| > M|g(x)| for all x > xi
f(x) = Θ(g(x)) iff xi g(x) <= f(x) <= xo g(x)

对于第一种情况,我们可以证明

Assuming n ∈ (0,∞).
Then logn<n, since n < 1+n < e^n by its Taylor series.
Thus, nlogn<n2 for all n ∈ (0,∞).
As a consequence, nlogn=O(n2).

所以这个过程如下,因为我已经知道logn&lt; n和我知道n是非负值,将两边乘以n得到nlogn&lt; N ^ 2

根据定义,如果f(x)&lt; = kg(x)其中k是常数,我可以说f(x)= O(g(x)),这就是上面发生的:nlogn&lt; = kn ^ 2,k = 1。

another proof for logn < n

Source

答案 1 :(得分:0)

首先,您应该知道不同符号的含义。为此,请看这里:asymptotic notation on wolframalpha

有各种方法来研究和确定这些是真还是假(并且你的问题确实是&#34;做我的作业请#34;一般),但一般来说你需要做的是确定什么发生&#34;任意大n&#34;

作为一种快速而肮脏的方式(在数学上不正确,但通常足以确定简单算法的复杂性),您可以忽略所有的附加常数(例如-2+1,... 。)并评估剩下的两个&#34;大&#34; n(如1e9和1e13)并检查比率。如果它保持不变那么两个复杂性渐近&#34;相同&#34;如果不是一个渐近支配另一个(=增长得更快,这意味着对于大n你可以忽略其他)

对于正确而完整的数学方法,大多数微积分课程都会对论证进行处理,您肯定可以在线查找资源,例如:在这里:growth of functions