数据结构--第一章 算法与算法分析
算法与算法分析
1.1 算法与算法分析1
1.1.1 定义
算法定义:通俗的讲,算法就是解决问题的方法和步骤。
1.1.2 算法特性
算法的特性:
1.有穷性:一个算法必须在执行有穷步骤后结束,并且每一步都是有穷时间。
2.确定性:算法中每条指令都要有确定的含义,唯一的执行路径,即相同的输入必须得到相同的输出。
3.可行性:算法必须是可执行的。
4.输入:一个算法有零个或多个输入
5.输出:一个算法有一个或多个输出。
1.1.3 算法设计要求
算法设计要求:
- 正确性:程序对于精心选择的、典型、苛刻且带有刁难性的数据能够得到满足要求的结果。
- 可读性:算法应易于理解。
- 健壮性:当输入非法数据时,算法能做出相应的判断,而不是输出奇怪的结果。
- 高效性:尽量少的时间和尽量低的存储空间
1.2 算法和算法分析2
一个问题可以有多个算法,如何评价算法的优劣?
在满足算法设计要求前三条的情况下,通过算法的效率来评价算法的优劣。
算法效率主要考虑:
1.时间效率:算法执行所耗费的时间。
2.空间效率:算法在执行过程中所耗费的存储空间。
1.2.1 算法时间效率的度量
算法的时间效率可以用依据该算法编写的程序在计算机上消耗的时间来衡量。主要有以下两种方法:
1.事后统计:将算法实现,测算其时间和空间
2.事前分析:估算
事前分析法:
算法运行时间 = 每条语句的频度之和
但是这样把每条语句都算一遍很麻烦,为了比较不同算法的时间效率,仅比较算法的数量级,即算法的渐进时间复杂度:
若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为
不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),
称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度。
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法时
时间量度记作:T(n)=O(f(n))
它表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相 同,称渐近时间复杂度。
基本语句:
1.算法中重复执行次数和算法的执行时间成正比的语句
2.对算法运行时间的贡献最大
3.执行次数最多
问题规模n:n越大算法的执行时间越长
排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素个数
树:n为树的结点个数
图:n为图的顶点数或边数
1.3 算法和算法分析3
计算时间复杂度的基本方法
分析算法时间复杂度的基本方法:
1.找出语句频度最大的那条语句作为基本语句
2.计算基本语句的频度得到问题规模n的某个函数f(n)
3.取其数量级用符号“O”表示
1.4 算法和算法分析4
注意:有的情况下,算法中基本操作执行的次数还随问题输入的数据集不同而不同。
空间复杂度:算法所需存储空间的度量
S(n) = O(f(n)) ,n为问题规模的大小。
算法要占据的空间:
1.算法本身占据的空间,输入/输出,指令,常量,变量等;
2.算法要使用的辅助空间。