时间复杂度和空间复杂度3 - 数据结构和算法05
时间复杂度和空间复杂度3
让编程改变世界
Change the world by program
函数调用的时间复杂度分析
如果我们把问题再实际化一点,大家是否能自己正确的分析出来呢? 我们来看下边这个例子: [codesyntax lang="c"]int i, j;
for(i=0; i < n; i++)
{
function(i);
}
void function(int count)
{
printf(“%d”, count);
}
[/codesyntax]
函数体是打印这个参数,这很好理解。function函数的时间复杂度是O(1),所以整体的时间复杂度就是循环的次数O(n)。
假如function是下面这样,又该如何呢:
[codesyntax lang="c"]
void function(int count)
{
int j;
for(j=count; j < n; j++)
{
printf(“%d”, j);
}
}
[/codesyntax]
事实上,这和之前我们讲解平方阶的时候举的第二个例子一样:function内部的循环次数随count的增加(接近n)而减少,所以根据游戏攻略算法的时间复杂度为O(n^2)。
接着使出杀手锏,给鱼油们一个挑战的机会!
尝试自己分析以下程序的时间复杂度:
[codesyntax lang="c"]
n++;
function(n);
for(i=0; i < n; i++)
{
function(i);
}
for(i=0; i < n; i++)
{
for(j=i; j < n; j++)
{
printf(“%d”, j);
}
}
void function(int count)
{
int j;
for(j=count; j < n; j++)
{
printf(“%d”, j);
}
}
[/codesyntax]
常见的时间复杂度
[caption id="attachment_743" align="aligncenter" width="680"]
常见的时间复杂度[/caption]
[caption id="attachment_744" align="aligncenter" width="400"]
常见的时间复杂度[/caption]
[caption id="attachment_745" align="aligncenter" width="400"]
常见的时间复杂度[/caption]
常用的时间复杂度所耗费的时间从小到大依次是:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
O(1),O(logn),O(n),O(n^2)我们前边已经给大家举例谈过了,至于O(nlogn)我们将会在今后的课程中介绍。
而像O(n^3)之后的这些,由于n值的增大都会使得结果大得难以想象,我们没必要去讨论它们。

浙公网安备 33010602011771号