您的位置:首页 > 理论基础 > 数据结构算法

大话数据结构之第二章算法总结,重点知识,时间复杂度

2014-04-10 21:51 495 查看

算法

算法是解决特定问题求解步骤的描述

算法的特性

五个基本特性:输入,输出,有穷性,确定性和可行性

输入输出:算法具有零个或多个输入,至少有一个或多个输出

有穷型:算法在执行有限步骤后,自动结束而不是出现五年循环,并且每一步在可接受的时间内完成

确定性:算法的每一步都具有确定的意义,不会出现二义性

可行性:算法的每一步都是可行的,都可以在有限的次数完成

算法的时间复杂度

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记做:T(n)=O(f(n))。

推导大O阶方法:

1.用常数1取代运行时间中的所有加法常数

2.在修改后的运行次数函数中,只保留最高阶项

3.如果最高阶项存在切不是1,则去除与这个项相乘的常数。

4.得到的结果就是大O阶

 

常数阶

  int sum=0;

  Sum +=1;

  Printf(“%d”,sum);

这个算法的运行次数函数f(n) = 3,根据我们推导的大O方法,把常数项3改为1,在保留最高项时发现,它根本没有最高阶项,所以这个算法的时间复杂度是O(1)

线性阶

 线性阶的循环结构会复杂很多,要确定某个算法的阶次,需要去顶摸个特定语句或者某个语句集运行的次数,因此,我们哟啊分析算法的复杂度,关键就是要分析循环结构的运行情况。

下面这段代码,它的循环的时间复杂度是O(n),因为循环体的代码需要执行n次

int i;

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

{}

对数阶

   下面这段代码

int i = 1;

While(i<n)

{

  I = i*2

}

由于每次i*2后,就距离n更近了,也就是说,有多少个2相乘后会大于n,则会退出循环。由于=n得到x=,所以这个循环的时间复杂度是O(logn)

循环嵌套

Int i.j;

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

{

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

}

语句执行的次数为,所以时间复杂度为O()

看下下面的嵌套

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

{

For(j=n;j<n;j++)

}

 当i=0时,执行了n次,当i=1时,执行了n-1次,当i=n-1时,执行了1次,所以执行的次数为  n+(n-1)+(n-2)。。。+1=

根据大O推导方法,只保留最高阶,并去掉最高阶常数,所以为
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: