a
n=6;
cout<<n<<endl;
常数时间,O(1)。这意味着随着n从1增加到无穷大,执行此语句所需的时间不会增加。每次增加n时,所需的时间不会增加。
b
n=16;
for (i=0; i<n; i++)
cout<<i<<endl;
线性时间,O(n)。这意味着随着n从1增加到无穷大,执行此语句所需的时间量会线性增加。每次增加n时,所需的额外时间量与前一次保持恒定。
c
i=6;
n=23;
while (i<n) {
cout<<i-6<<endl;
i++;
}
线性时间,O(n),与上面的示例2相同。
d
int a[ ] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
n=10;
for (i=0; i<n; i++)
a[i]=a[i]*2;
for (i=9; i>=0; i
cout<<a[i]<<endl;
线性时间,O(n)。随着n从1到无穷大的增加,执行这些语句所需的时间量呈线性增长。线性线比示例3陡峭两倍,但是大O符号不关心线有多陡峭,它只关心时间要求如何增长。两个循环需要随着n的增加而线性增长的时间量。
e
sum=0;
n=6;
k=pow(2,n);
for (i=0;i<k;i++)
sum=sum+k;
创建一个图表,显示在给定值n的情况下sum=sum+k
被执行的次数:
n number_of_times_in_loop
1 2^1 = 2
2 2^2 = 4
3 2^3 = 8
4 2^4 = 16
5 2^5 = 32
6 2^6 = 64
当n从1到无穷大时,请注意我们在循环中的次数呈指数级增长。2->4->8->16->32->64
。如果我插入150的n
会发生什么?我们在循环中的次数变得极其庞大。
这是指数时间:O(2^n)
(请看这里)表示算法的增长将随着输入数据集中每个附加元素而翻倍。插入一个大型的n,你将等待几小时或几年才能完成计算,只为了处理少量的输入项。
我们为什么要关心?
作为计算机科学家,我们有兴趣正确理解BigO符号,因为我们希望能够以权威和信心说出这样的话:
“Jim用于计算行星之间距离的算法需要指数时间。如果我们想要处理20个对象,它需要太多时间,他的代码很糟糕,因为我可以用线性时间制作一个。”
更好的是,如果他们不喜欢听到的内容,你可以用数学证明它。
{}
,那么只有下一行被视为循环的一部分...这将改变答案。请重新构建您的代码以获得更好的答案 :) - mevatron