- 11
- 0
- 约1.61万字
- 约 89页
- 2016-12-14 发布于重庆
- 举报
* * 1.4 算法和算法分析 2、算法、过程和程序的区别 算法与过程的主要区别: 算法经过有限步计算执行后必会终止。 过程可以是有穷的,也可以是无穷的。 算法与程序的主要区别: 一个程序往往是指某种机器语言书写的一个计算过程。 一个算法并不一定表现为一个计算机程序,它可采用多种语言和方式描述。 * * 1.4 算法和算法分析 3、算法的描述方法 条列式的步骤 流程图(Flow Chart) 伪码(Pseudo Code) 程序语句 类C语言 * * 1.4 算法和算法分析 条列式的步骤 以条列式的步骤来描述解决问题的方法。 例:运用顺序查找来查找数据中某一个特定值。 步骤1:输入数据和欲查找值 步骤2:查找数据中的第一项 步骤3:如果在全部数据中没有查找到欲查找值,表示没有查找到数据 步骤4:如果欲查找值等于此项数据,表示查找到数据 步骤5:如果欲查找值不等于此项数据,查找下一项数据,回到第三步继续执行。 * * 1.4 算法和算法分析 流程图(Flow Chart) 用图形符号描述解决问题的方法 开始 输入查找数据 查找第一笔数据 数据是否全部查找过 输入要查找的值 表示未查找到数据 表示查找到数据 是否等于此项数据 是 是 否 否 * * 1.4 算法和算法分析 伪码(Pseudo Code) 以夹杂程序语法和自然语言的形来描述解决问题的方法。 Procedure Sequential_Search(Data, KeyValue) 设i为1; While() { if (欲查找值等于 Data[i]) printf(“查找到数据”); else if (i > 数据个数 ) printf(“未能查找到数据”); i++; } * * 1.4 算法和算法分析 程序语句 直接以程序语法来描述解决问题的方法。 /* 顺序查找 int Data[20], Counter=1 */ int Seq_Search(int Key) { int i; for ( i=0; i<20; i++) { printf(“[%d]”,Data[i]); /*输出数据*/ if (Key == Data[i] ) /*找到数据*/ return 1; Counter++; /*计数器递增*/ } return 0; } * * 1.4 算法和算法分析 类C语言 例:试说明下列计算过程是否是一个算法: 开始 n<=0 n++ 重复(3) 结束 上述过程仅有五步,但过程一开始执行就不会停止,因而它不具备算法的有穷性,故不是一个算法。 * * 1.4 算法和算法分析 算法分析:对算法质量优劣的评价,被分析的算法必须是正确的。 除正确性外,应从三个方面分析一个算法: 依据算法编写的程序在计算机中运行时间多少的度量,称之为时间复杂度。 依据算法编写的程序在计算机中占存储空间多少的度量,称之为空间复杂度。 其他方面。如算法的可读性、可移植性以及易测试性的好坏。 * * 1.4 算法和算法分析 4、算法时间效率的度量 算法在计算机上运行时所消耗的时间与下列因素有关: 算法选用何种策略 问题的规模 书写程序的语言 编译程序所产生的机器代码的质量 机器的速度 算法的时间效率:算法的执行时间随问题规模的增长而增长的趋势。 * * 从算法中选取一种对于所研究的问题来说是基本 操作的原操作,以该基本操作重复执行的次数作 为算法的时间量度。 (频度统计法) 1.4 算法和算法分析 度量一个程序的执行时间的方法: 事前分析估算的方法 事后统计的方法 固有数据类型的操作 包含该基本操作的语句重复执行的次数(语句的频度) 其重复执行次数和算法的执行时间成正比的原操作,多数情况下是最深循环内的语句中的原操作 * * 1.4 算法和算法分析 算法中基本操作的重复执行次数是问题规模n的某个函数f(n)。 算法的时间量度记作 T(n)=O(f(n)) 随问题规模n的增大,算法执行时间的增长率和f(n)的增 长率相同, T(n)称为算法的渐近时间复杂度。 * * 1.4 算法和算法分析 关于O符号的数学定义: f (n)=O(g(n)) 表示存在一个正的常数c和n0,使得对所有的n≥n0,有 f(n)≤ c*g(n) 定理: 如果f(n)=amnm+…+a1n+a0,且am>0, 则f(n)=O(nm) 大写O符号给出了函数f的一个上限 。 * * 1.4 算法和算法分析 关于O符号的数学定义 当n→∞时,有f(n)/g(n)=常数≠0, 则称函数f(n)与g(n)同
原创力文档

文档评论(0)