大话数据结构之第二章算法总结,重点知识,时间复杂度
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推导方法,只保留最高阶,并去掉最高阶常数,所以为
相关文章推荐
- 大话数据结构之第一章数据结构绪论总结
- 数据结构10:二分查找的递归与非递归表示与实现
- 数据结构-栈和队列
- 数据结构-线性表
- 数据结构迷宫问题
- 数据结构的单链表创建与输出
- C指针总结
- cdev_alloc和cdev_init
- 【算法基础】基础查找算法
- 数据结构--基本概念
- 数据结构和算法的基本概念
- 《算法导论》第十四章----数据结构的扩张(动态顺序统计)
- 数据结构9:斐波那契数列表示与实现(递归)
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 数据结构--栈和队列
- 数据结构8:队列的顺序存储结构表示和实现
- 数据结构之无向图的存储
- 数据结构与算法分析 - 快速幂简介
- 【福利】【已送出几本,更新下】囤积书放送(oracle,java web,js,jquery,rcp,android,数据结构设计模式。。。。。)
- 数据结构基础(15)------------QuickSort