一、算法的描述
(1)自然语言:英语,中文
(2)流程图:传统流程图,NS流程图
(3)伪代码:类语言:类C语言
(4)程序代码:C语言程序,JAVA语言程序…
二、 算法与数据结构的关系
程序=数据结构+算法
数据结构即数据的逻辑结构;数据结构是相互之间存在的一种或多种特定关系的数据元素的集合;包括4类基本的结构,集合,线形结构,树形结构,图状或网状结构;算法指编程过程中完成一件事采用的方法;在编程过程中采用好的算法可以降低程序的时空复杂度。
三、算法的特性
一个算法必须具备以下五个特性:
(1)有穷性:一个算法必须总是在执行有穷性之后结束,且每一步都在有穷时间内完成。
(2)确定性:算法中的每一条指令必须有确定的含义,没有二义性,在任何条件下,只有唯一的一条执行路径。
(3)可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
(4)输入:一个算法有零个或多个输入
(5)输出:一个算法有零个或多个输出
四、算法设计的要求
(1)正确性
(2)可读性
(3)健壮性
(4)高效性
五、算法效率
(1)时间效率:指的是算法所耗费的时间
(2)空间效率:指的是算法执行过程中所耗费的存储空间
算法的时间效率和空间效率有时候是矛盾的。
(3)算法时间效率的度量方法
1、事后统计
将算法实现,测算其时间和空间开销。
(缺点:编写程序实现算法将花费很多时间和精力,所得实验结果依赖于计算机软硬件等环境因素,掩盖算法本身的优劣)
2、事前分析(大多数采用)
对算法所消耗资源的一种估算方法
算法运行时间=一个简单操作所需的时间+简单操作次数
即算法中每条语句的执行时间之和:
算法运行时间=∑每条语句的执行次数*该语句执行一次所需要的时间
(其中,每条语句所执行的次数又称为语句频度)
每条语句执行一次所需要的时间,一般是随机器而异的,取决于机器的指令性能,速度以及编译的代码质量,是由机器本身软硬件环境决定的,与算法无关。
通常来说,越高级的语言,执行速度越慢
例如:
两个n*n矩阵相乘的算法可描述为:
为了便于比较不同算法的时间效率,我们仅比较他们的数量级
例如:T1(n)=10n^2 与 T2(n)=5n^3
数量级越小,时间效率越小
算法时间复杂度定义
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法时间量度记作:T(n)=O(f(n))
它表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐进时间复杂度。