考慮下面的C函數:爲什麼此循環返回值爲O(n log log n)而不是O(n log n)?
int fun1 (int n)
{
int i, j, k, p, q = 0;
for (i = 1; i<n; ++i)
{
p = 0;
for (j=n; j>1; j=j/2)
++p;
for (k=1; k<p; k=k*2)
++q;
}
return q;
}
的問題是決定哪些功能fun1
最密切關注接近返回值?
(A)N^3
(B)N(logn)時間^ 2
(C)nlogn
(d)n日誌(logn)時間
這是其給出的解釋:
int fun1 (int n)
{
int i, j, k, p, q = 0;
// This loop runs T(n) time
for (i = 1; i < n; ++i)
{
p = 0;
// This loop runs T(Log Log n) time
for (j=n; j > 1; j=j/2)
++p;
// This loop runs T(Log Log n) time
for (k=1; k < p; k=k*2)
++q;
}
return q;
}
但時間如果循環變量被劃分/乘以常量,則循環的複雜度被視爲O(Logn)。
for (int i = 1; i <=n; i *= c) {
// some O(1) expressions
}
for (int i = n; i > 0; i /= c) {
// some O(1) expressions
}
但它提到,內環採取Θ(日誌日誌n)的每一次,任何人都可以解釋我AR的原因是答案錯了嗎?
請參閱http://geeksquiz.com/gate-gate-cs-2015-set-1-question-41/ – coder101
@ coder101據我所知,時間複雜度爲O(n日誌日誌n)不正確。請注意,問題不會*詢問函數返回多長時間,而是要求您可以對返回值(q)進行說明。 – templatetypedef
是的,這是非常有益的,他們的回答是正確的,但解釋是錯誤的:) – coder101