根据Big O表示法,以下函数的增长率是多少?
f (n) = Comb(1000,n) for n = 0,1,2,…
int Comb(int m, int n)
{
int pracResult = 1;
int i;
if (m > n/2) m = n-m;
for (i=1; i<= m; i++)
{
pracResult *= n-m+i;
pracResult /= i;
practicalCounter++;
}
return pracResult;
}
递归:
int combRecursive (int m, int n)
{
recursiveCounter++;
if (n == m) return 1;
if (m == 1) return n;
return combRecursive(n-1, m) + combRecursive(n-1, m-1);
}
我猜n ^ 2 ???我可能错了......但我一直在努力弄清楚事情的效率......
先谢谢你。
答案 0 :(得分:0)
这是O(1)
。
根据定义,f(n) = O(g(n))
如果存在c
,则所有n
,f(n) <= c*g(n)
让c
= Comb(1000,500)
适用于所有n
,Comb(1000, n) < c * 1
。因此Comb(1000, n) = O(1)
答案 1 :(得分:0)
对于n = 1到2000,将有与n
成比例的操作对于所有n&gt; 2000年,总运营量不变。
因此,函数复杂度为O(1)
我必须告诉你,你必须读一些书。 :)
Sahni的数据结构和算法非常轻松。
Knuth的算法很重,但最好。