时间复杂度和Big-O符号特定问题

时间:2011-06-23 07:55:41

标签: algorithm big-o time-complexity

我过去考试中的一个问题是一个多项选择题:

Choose the FALSE statement: 7(log n) + 5n + n(log log n) + 3n(ln n) is

A. O(n^2)
B. Ω(n^2)
C. O(n log^2 n)
D. Ω(n)
E. Θ(n log n)

首先我得出结论,算法的运行时间必须是Θ(n log n),这排除了选项E.然后我得出结论,选项B,Ω(n ^ 2),是假的,因为我知道Θ(n log n)小于Θ(n ^ 2),因此Ω(n ^ 2)不可能为真。所以我认为B就是答案。

但我也意识到C也不可能是真的,因为Θ(n log n)的运行时间比Θ(n log ^ 2 n)大。但它的答案可能不正确。

这是正确的:它是B吗?还是C?还是两个?我很困惑。 :S

2 个答案:

答案 0 :(得分:3)

虚假陈述是omega(n^2)。 它正是theta(nlogn)(因为3n(ln n))是“最高”,它是theta(nlogn)
omega(n^2)说它并不比n ^ 2复杂度更好,这在这里是错误的。


另外:在您的示例中,以下情况属实:
7(log n)< 5n< 5n n(log log n)< 3n(恩)
7logn = theta(logn),5n = theta(n),n(loglogn)= theta(nloglog(n)),3nln(n)= theta(nlogn) 如上所述,(nlogn)是最高的,因此:
7(log n) + 5n + n(log log n) + 3n(ln n) = theta(nlogn)
所有都是o(n ^ 2)(这里有小o),所以Omega(n ^ 2)是虚假陈述。

编辑:澄清并添加我在评论中写的内容:
选项C为真,因为O(nlogn)< O(n日志^ 2(n))的。数学: 每{n> 2} nlog^2(n) = n*log(n)*log(n) > n*log(n)。 例如:对于n = 1,000,000:nlogn = 1,000,000*20 = 20,000,000
n*log^2(n) = 1,000,000*20*20=400,000,000

答案 1 :(得分:1)

假设log是基数2的对数而ln是自然对数,则以下陈述为真:

  

Θ(日志(名词))≤; Θ(名词·日志(日志(名词的)))≤; Θ(名词的)LT; Θ(名词·LN(名词))

因此整体复杂度为Θ( n ·ln( n ))。

现在让我们检查一下这些陈述:

  • n ·ln( n )∈O( n 2

      

    n ·ln( n )≤ c · n 2 对于 c = 1,∀ n ≥0

  • n ·ln( n )∈Ω( n 2

      

    n ·ln( n )≱ n 2 因此ln( n )< c ·* n * c = 1,∀ n ≥0

  • n ·ln( n )∈O( n ·(log( n )) ) 2 true

      

    n ·(log( n )) 2 = n ·(ln( n )/ ln(2)) 2 = n ·(ln( n )) 2 /(ln(2)) 2 n ·ln( n )≤ c · n ·(ln( n )) 2 /(ln(2)) 2 c =(ln(2)) 2 ,∀ n ≥e

  • n ·ln( n )∈Ω( n true

       n ·ln( n )≥ c · n c = 1,∀ n ≥0

  • n ·ln( n )∈Θ( n ·log( n ))是 true

      

    n ·log( n )= n ·ln( n )/ ln(2)和 n ·ln( n )= c · n ·ln( n )/ ln(2) c = ln(2),∀ n ≥0