我在渐近分析问题上遇到了一些麻烦。该问题要求渐近最坏情况运行时间和函数的渐近预期运行时间。 Random(n)在1和n之间生成一个均匀分布的随机数(1到n之间的每个整数都是相同的。)
Func2(A, n)
/* A is an array of integers */
1 s ← A[1];
2 k ← Random(n);
3 if (k < log2(n)) then
4 for i ← 1 to n do
5 j ← 1;
6 while (j < n) do
7 s ← s + A[i] ∗ A[j];
8 j ← 2 ∗ j;
9 end
10 end
11 end
12 return (s);
我想知道第3行(if(k -Matt
答案 0 :(得分:0)
提示:
第4-10行的运行时间不是O(n ^ 2)。
考虑while循环的j值:
j = 1,2,4,8,16 ......
那不是O(n)。
答案 1 :(得分:0)
对于大n,k几乎总是大于log(n)。例如,对于n = 1024,log(1024)= 10 您将执行循环的概率是P = log(n)/ n 所以时间将是
(log(n)/n)*(n*log(n))+ O(RandomFunc(n))
所以一切都依赖于O(Random(n))。如果O(Random(n))= O(n)
O(n)>O(log(n)^2) = O(n)
第4-10行是O(nlog(n))
答案 2 :(得分:0)
使用Sigma Notation,您可以有条不紊地执行: