大计基第5章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

要求:用迭代的方法,p118 要求:用迭代的方法, 计算1+1/2+1/3+…1/n 之和 计算
Start Set sum=0 Set n=1 while i <= m do sum = sum + 1.0/n n=n+1 end while Output sum End
递归 FILO: First in Last Out 递归是算法的自我调用 FIFO: First in First Out
• 贪心法 – 贪心算法(Greedy Algorithm)的基本思想是从 贪心算法( ) 小的方案推广到大的解决方法。它分阶段工作, 小的方案推广到大的解决方法。它分阶段工作, 在每一个阶段选择最好的方案, 在每一个阶段选择最好的方案,而不考虑其后的 结果如何。 结果如何。 – 贪心法主要用于求解最优问题,但它已经发展成 贪心法主要用于求解最优问题, 为一种通用的算法设计技术:核心是: 为一种通用的算法设计技术:核心是: • 可行性 可行性——每一步选择必须满足问题的约束; 每一步选择必须满足问题的约束; 每一步选择必须满足问题的约束 • 局部最优 局部最优——它是当前可选择的方案中最优的; 它是当前可选择的方案中最优的; 它是当前可选择的方案中最优的 • 不可取消性 不可取消性——选择一旦做出,在算法的其后步 选择一旦做出, 选择一旦做出 骤中不能被取消。 骤中不能被取消。 – 贪心法不能保证最后解是最优的,也不能用于求 贪心法不能保证最后解是最优的, 解最大或最小问题。在算法的效率上, 解最大或最小问题。在算法的效率上,贪心法快 程序实现需要的内存开销也较小。 速,程序实现需要的内存开销也较小。但遗憾的 它们往往是不正确的。 是,它们往往是不正确的。然而一旦被证明是正 确的,其执行效率和速度有很大的优势。 确的,其执行效率和速度有很大的优势。
No
Yeswk.baidu.com
No 条件 条件 Yes
(a)While结构 ) 结构 (b) Until结构 ) 结构 当型) 直到型) (当型) (直到型) 按照设定的条件重复执行一组命令 死循环是指在循环运行过程中循环条件不能结束
5.4 算法的表示
• 算法的表示是为了把算法以某种形式加以表达, 算法的表示是为了把算法以某种形式加以表达, 因此一个算法的表示可以有不同的方法, 因此一个算法的表示可以有不同的方法,常用 的:
排序: 排序 将一组原始数据按照递增或递减的规 律进行重新排列。 律进行重新排列。 冒泡法排序。 冒泡法排序。 从列表的最后开始比较相邻的两个 将较小的向前移动, 数,将较小的向前移动,再和前一个相 邻的数据比较, 邻的数据比较,同样把较小的数向前移 动,直到列表的开始。接着继续这个过 直到列表的开始。 程,找到的次小的数排到列表的第二个 位置,依次类推,直到结束。 位置,依次类推,直到结束。 p108
Start Set sum=0 Set i=n while i <= m do sum = sum + i i=i+1 end while Output sum End
问题的提出:累积问题(p104) 问题的提出:累积问题
N! = 1*2*…. *N Start Set product=1 Set i=1 while i <= N do product = product * i i=i+1 end while Output sum End
例:自然语言 自然语言 求N!的算法 !
自然语言有二义性 “原语”: 语法和语 原语” 义的规定 计算机程序设计语言
例:伪代码
求N!的算法 !
例:伪代码 求N!的算法
5.5 算法的发现
• 发现算法具有很大的挑战性 – “中国邮递员问题”: 中国邮递员问题” 不但要选择路径, 不但要选择路径,而且要确保这个选择的路径 是最短的。 是最短的。
问题的提出:求数的位数 问题的提出:求数的位数(p105)
给定一个整数n, 如何计算得到它的位数? 给定一个整数 如何计算得到它的位数?
Start set count = 1 input n while n ≠0 do n = n/10 count = count + 1; end while Output count End
一种常用的计算方法) 迭代 (一种常用的计算方法)
一种建立在循环基础上的算法。 一种建立在循环基础上的算法。 不断用变量的旧值递推新值的过程 举例: 判断一个整数是否为素数” 举例:“判断一个整数是否为素数”的迭代算法 算法思路:素数是指只能被1和它本身整除的数 和它本身整除的数。 算法思路:素数是指只能被 和它本身整除的数。判 断它的方法为: 是要被判断的整数) 断它的方法为:将n(设n是要被判断的整数)作为 ( 是要被判断的整数 被除数,用2~(n-1)之间的各个整数轮流去除, 被除数, ( )之间的各个整数轮流去除, 如果都不能整除, 是素数。 如果都不能整除,则n是素数。 是素数
问题的提出:求和问题(p104) 问题的提出:求和问题 计算n~m之间的整数之和 计算 之间的整数之和
Start Set sum=0 Set i=n while i <= m do sum = sum + i i=i+1 end while Output sum End
迭代
一种建立在循环基础上的算法。 一种建立在循环基础上的算法。 不断用变量的旧值递推新值的过程
流程图表达 初始化
求5!的算法 ! 1! = 1 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! P:中间结果 : 最后的结果) (最后的结果) I: 控制相乘的次数 数据溢出的问题 16位长(216-1): 65535 位长( 位长 9! = 362880 流程图: 流程图:用箭头和几何图形 的连接来表示算法的过程
基本算法 求和 累积 求最大值和最小值 求数的位数 初始化 判断条件 计算的关键步骤 结果(存储) 结果(存储)
问题的提出: 问题的提出:求100-1000以内的水仙花 以内的水仙花 数(p103)
水仙花数:一个 位正整数的每一位数的 位正整数的每一位数的n次 水仙花数:一个n位正整数的每一位数的 次 幂之和等于这个数本身, 幂之和等于这个数本身 如153 = 13+53+33
问题的提出:求最大 最小问题 最小问题(p105) 问题的提出:求最大/最小问题 此例比较两个数的大小) (此例比较两个数的大小)
Start input a , b if ( a > b) max = a else max = b Output max End Start input a , b max = a if max < b max = b Output max End
算法:求两个正整数 和 的最大公约数 算法:求两个正整数A和B的最大公约数
• 欧几里德(Euclid)算法 欧几里德( )
第一步:比较 和 这两个数 这两个数, 第一步:比较A和B这两个数,将A设置 设置 为较大的数, 为较小的数 为较小的数; 为较大的数,B为较小的数; 第二步: 除以 除以B,得到余数R1; 第二步:A除以 ,得到余数 ; 第三步:如果R1等于 等于0, 第三步:如果 等于 ,则最大公约数 就是B;否则将B赋值给 赋值给A, 就是 ;否则将 赋值给 ,R1 赋值给B,重复进行第二步、 赋值给 ,重复进行第二步、 第三步。 第三步。
– 自然语言 – (传统的)流程图 传统的) – (结构)流程图 结构) – 伪代码 – (PAD图) 图
描述 算法的 结构 准确的描述) (准确的描述) =》程序 》
流程图表达
求5!的算法 ! 1! = 1 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! P:中间结果 : 最后的结果) (最后的结果) I: 控制相乘的次数 初始化
例:求N的阶乘。
5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1
排序: 排序 将一组原始数据按照递增或递减的规 律进行重新排列。 律进行重新排列。 选择法排序 (如果是从小到大排序的 如果是从小到大排序的 话) 把表中最小的数找到并放入第一个 位置,然后比较余下的数, 位置,然后比较余下的数,找到次小的 数放到第二个位置, 数放到第二个位置,直到对所有数据全 部扫描过。 部扫描过。 p107
欧几里德( 欧几里德(Euclid)算法 )
A B R 36 24 12 24 12 0 求得 36与24的最大公约数是12。 2. 40 18 4 18 4 2 4 2 0 求得 40与18的最大公约数是2。 1.
5.2 算法的分类和特性
按照算法所涉及的对象分类: 按照算法所涉及的对象分类: 数值运算算法和非数值运算算法 算法应该具备特性 确定性:每一个步骤是确定的,无二义。 ① 确定性:每一个步骤是确定的,无二义。 有穷性:步骤是有限的。 ② 有穷性:步骤是有限的。 有效性: ③ 有效性:算法中的每一个步骤都能得到一个 明确的结果。( 。(Ex: /0) 明确的结果。( ④ 可有零个或多个输入 有一个或多个输出。 ⑤ 有一个或多个输出。 没有输出的算法是没有意义的
5.7 算法的方法学
• • • • 贪心法 分治法 动态规划 回溯法
贪心法 (P109): : 以局部最优的方式做一个选择。 局部最优的方式做一个选择。 的方式做一个选择 Ex: 换硬币:为使所换的硬币数最小, 换硬币:为使所换的硬币数最小, 重复地选择不大于不足数额的最大面值 的硬币
“眼下能拿到的就先拿到” 眼下能拿到的就先拿到” 眼下能拿到的就先拿到
第5章 算法基础 章
算法的概念 算法的分类和特性 算法的三种结构 算法的表示 算法的发现 常用算法 其他求解问题的算法 数据表达和数据结构
5.1 算法的概念
1)问题 ) 2)采取的方法和步骤 )
• 广义地说,为解决问题而采用的方法和步骤就 广义地说, 是算法。在计算机中,算法是程序设计的基础, 是算法。在计算机中,算法是程序设计的基础, 算法的质量直接影响程序运行的效率。 算法的质量直接影响程序运行的效率。 • 根据图灵理论,只要能够被分解为有限步骤的 根据图灵理论, 问题就可以被计算机执行。 问题就可以被计算机执行。 • 在计算机领域,算法描述主要就是为了能够将 在计算机领域, 算法的步骤变成计算机能够用它的语言所实现 的表示方式。 的表示方式。 • 算法的正式定义:算法是求解问题步骤的有序 算法的正式定义: 集合,它能够产生结果并在有限时间内结束。 集合,它能够产生结果并在有限时间内结束。
最优问题
15
• 解决问题的4个步骤: 解决问题的4个步骤:
1.理解问题 1.理解问题 2.设计一个解决问题的方案 2.设计一个解决问题的方案 3.执行这个方案 3.执行这个方案 4.检验这个方案 4.检验这个方案
16
问题的提出:求和问题(p104) 问题的提出:求和问题 计算n~m之间的整数之和 计算 之间的整数之和
排序算法是解决很多问题所需要的
Ex:在不同领域的广泛使用: 在不同领域的广泛使用: 在不同领域的广泛使用 生物信息的DNA序列分析 序列分析 生物信息的 Internet的网页(信息)的快速搜索 的网页(信息) 的网页 企业盈利的最大化 。。。
基于效率的考虑: 基于效率的考虑: 各种排序算法
查找: 查找:把一个特定的数据从列表中找到并提 供它所在的位置 对于列表数据有两种基本的方法: 对于列表数据有两种基本的方法: 顺序查找 从列表的第一个数据(或叫做元素)开始, 从列表的第一个数据(或叫做元素)开始, 但给定的数据和表中的数据匹配时, 但给定的数据和表中的数据匹配时,查找过 程结束,给出这个数据所在表中的位置。 程结束,给出这个数据所在表中的位置。 折半查找(二分法)(对排好序的数据) )(对排好序的数据 折半查找(二分法)(对排好序的数据) 从列表的一半开始,比较列表处于一半( 从列表的一半开始,比较列表处于一半(中 位置的数据, 间)位置的数据,判断是在前半部分还是后 半部分(根据列表的排序确定的)。 半部分(根据列表的排序确定的)。
Start set n= 100 a = n mod 10 b = (n/10) mod 10 遍历查找的过程 c = (n/100) mod 10 while (n<1000) do if ( n = a*a*a +b*b*b+c*c*c) Output n n = n +1 end while End
5.3 算法的三种结构
根据结构化程序设计, 根据结构化程序设计,所有的程序都由三 种结构构成: 种结构构成:程序的逻辑结构 顺序结构 分支结构或条件结构 循环结构
顺序结构
A
B
Yes
分支结构
条件 条件 No
A
B
按照命令出现的先 后顺序依次执行
根据设定的条件来决 定程序的执行方向
循环结构
A
A
条件 条件
相关文档
最新文档