时间复杂度

来源:互联网 发布:希尔伯特曲线算法 编辑:程序博客网 时间:2024/05/29 11:21

学习数据结构的时候经常接触这个概念,自考书上也有这个概念,但是总感觉太过抽象。数学分析,推导公式什么的实在不是我这种半路出家的菜鸟搞得定的,无奈从别的资料中寻找一些更加感性的描述来理解这个概念。比如成杰的大话设计模式

首先来看常数阶

比如下面这段代码

int sum =0,n=100;

sum=(1+n)*n/2;

printf(sum);

这个算法的执行次数是f(n)=3。推导时间复杂度的步骤是首先将3变成1,然后只保留最高阶。然后我们发现这个公式根本没有最高阶。得到O(1).其实常数阶的代码段说明此种代码段的执行次数是固定的,和n没有关系。

然后看线性阶

int i;

for(i=0;i<n;i++)

{

printf();

}

这段代码是个循环,执行的次数是由n的大小决定的,因此,和O(i)差别很大。

再看对数阶

int  count = 1;

while(count < n)

{

  count = count *2;

}

由于每次count乘以2以后就距离n近了一分,有多少个2相乘后大于n,就会退出循环。得到对数个n

最后看看平方阶段

for(i=0;i<n;i++)

  { 

  for(j=0;j<n;j++)

          {

          }

    }

因为循环嵌套循环所以执行的次数是由两个循环共同决定的,n*n。

总结

大话数据结构不错,提供的例子生动形象,是入门的好教材。。

0 0