计算机软件及应用算法及其描述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时间复杂度符号O的两个定理:
在估算算法的时间复杂度时,为简单计,以后 只考虑内循环语句的执行频数,而不细致计算 各循环设计语句及其它语句的执行次数,这样 简化处理不影响算法的时间复杂度。
验对比方法、数学方法来分析算法。
实验对比分析很简单,两个算法相互比较求解时 间。 数学方法能在严密的逻辑推理基础上判断算法的 优劣。 在算法分析中,我们往往采用能近似表达性能的 方法来展示某个算法的性能指标。
一个算法的时间复杂度是指算法运行所需的时 间。 一个算法的运行时间取决于算法所需执行的语 句(运算)的多少。 算法的时间复杂度通常用该算法执行的总语句 (运算)的数量级决定。
(1) 确定性 (2) 可行性 (3) 有穷性 (4) 算法有零个或多个输入 (5) 算法有一个或多个输出
1.1.2 算法描述
(1)一个问题可以设计不同的算法来求解; 同一个算法可以采用不同的形式来表述。
(2)描述算法可以有:自然语言方式、流程 图方式、伪代码方式、计算机语言表示方
式与表格方式等。
算法的复杂性越高,所需的计算机资源 越多。
最重要的计算机资源是时间资源与空间 资源。
需要计算机时间资源的量称为时间复杂 度,需要计算机空间资源的量称为空间 复杂度。
时间复杂度与空间复杂度集中反映算法 的效率。
1.2.1 时间复杂度
要想充分理解算法并有效地应用算法求解实际案 例,关键是对算法的分析。通常我们可以利用实
设整数竖式除法每次试商的被除数为a, 除数为 2011,每次试商的余数为c。
循环以余数c≠0作为循环条件。循环外赋初值: c=1111,n=4或c=111,n=3等等。
设置竖式除法模拟循环,循环中被除数 a=c*10+1,试商余数c=a%2011。
若余数c=0,结束循环,输出结果; 否则,计算a=c*10+1为下一轮运算的被除数,
2个语句各执行1次,共执行2次。时间复杂度为O(1)
(2) for(k=1;k<=n;k++) { x=x+y; y=x+y; s=x+y; }
“k=1”执行1次;“k<=n”与“k++”各执行n次;3个赋值语句,每个 赋值语句各执行n次;共执行5n+1次. 时间复杂度为O(n).
例1-3 试计算下面三个程序段的执行频数
• 上机环境:VC++6.0 • 上机通过每章指定的案例求解程序与习题 • 按要求填写实验报告
学习建议:
• 培养案例求解兴趣
• 自觉完成布置的作业 学会归纳、总结和提炼; • 加深对算法应用的理解
自觉调整学习状态: • 善于变通、拓展与改进
注重算法设计,提高解决实际案例的能力。
第 1 章 算法与程序设计概述
继续试商。每商一位,统计被除数中“1”的个 数的变量n增1。
(2) 竖式除法模拟描述
c=1111;n=4; // 变量c与n赋初值
while(c!=0) // 模拟竖式除法
{ a=c*10+1;
c=a%2011;
n=n+1;
// 每试商一位n增1
}
print(n);
// 输出的简略表示
1.2 算法的复杂性分析
➢教学要求
➢ 了解算法概念、算法特征及算法的描述 ➢ 建立算法的复杂性概念 ➢ 掌握结构化程序设计的基本方法
➢本章重点
➢ 应用 c 语言描述算法 ➢ 掌握算法时间复杂度分析
1.1 算法及其描述
算法是程序设计的基础,是计算机科学的核心。
1.1.1 算法定义 算法是计算机解决问题的过程,是解决某一 问题的运算序列。或者说算法是问题求解过 程的运算描述。 当面临某一问题时,需要找到用计算机解决 这个问题的方法与步骤,算法就是解决这个 问题的方法与步骤的描述。
1. 算法的三要素
算法由操作、控制结构与数据结构 三者组成。
(1) 操作:算术运算,关系运算,逻辑运算; 输入、输出、赋值等操作。
(2) 控制结构:顺序结构,选择结构,循环 结构,模块调用。
(3) 数据结构:数据之间的逻辑关系。
2. 算法的基本特征
一个算法由有限条可完全机械地执 行的、有确定结果的指令组成,具 有以下特性:
input(a,b); // 输入的简略表示
r=a%b;
while(r!=0) // 实施辗转相除
{ a=b; b=r; r=a%b; }
print(b);
// 输出的简略表示
例1-2 由n个1组成的整数能被2011整 除,求n至少为多大?
(1) 试模拟整数竖式除法:
可以证明,n是存在的,且不大于2011,因而以 上竖式运算总会停止。当除源自文库算的余数为“0” 时,数一数被除数中有多少个“1”即可。
学时安排:36(讲授)+18(上机)
( 可根据实际教学计划进行调整)
课堂讲授 :
各常用算法的概念与设计要点。 重点讲授应用算法设计求解基本的典型案例,并
通过相关程序,引导设计变通。 在基本案例引导下自学相关联案例求解。 小组讨论与基本案例相关的拓展与引申案例求解,
为“课程设计”作准备。
上机实践:
(3) for(t=1,k=1;k<=n;k++)
{ t=t*2;
for(j=1;j<=t;j++)
s=s+j; }
“t=1”与“k=1”各执行1次;“k<=n”与“k++”各 执行n次;“t=t*2”执行n次;“j=1”执行n次; “j<=t”、“j++”与内循环的赋值语句“s=s+j”各 执行频数为: 总的执行频数为:
(3)当一个算法使用计算机程序设计语言描 述时,就是程序。 本书采用C语言与自然语言相结合来描述算 法。
例1-1 求两个整数a,b的最大公约 数的欧几里德算法
(1) 数 a 除以 b 得余数 r;若r=0,则b为 所求的最大公约数。
(2) 若 r≠0,以b为a,r为b,继续(1).
欧几里德算法具体描述如下:
一条语句的数量级即执行它的频数,一个算 法的数量级是指它所有语句执行频数之和。
在分析算法时,隐藏细节的数学表示方法为 大写字母“O”记法,它可以帮助我们简化算 法复杂度计算的许多细节,提取主要成分。
算法的执行频数的数量级直接决定算 法的时间复杂度。
例1-3 试计算下面三个程序段的时间复杂度
(1) x=x+1; s=s+x;