我过去考试中的一个问题是一个多项选择题:
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
答案 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