大计基第5章
流程图表达 初始化
求5!的算法 ! 1! = 1 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! P:中间结果 : 最后的结果) (最后的结果) I: 控制相乘的次数 数据溢出的问题 16位长(216-1): 65535 位长( 位长 9! = 362880 流程图: 流程图:用箭头和几何图形 的连接来表示算法的过程
– 自然语言 – (传统的)流程图 传统的) – (结构)流程图 结构) – 伪代码 – (PAD图) 图
描述 算法的 结构 准确的描述) (准确的描述) =》程序 》
流程图表达
求5!的算法 ! 1! = 1 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! P:中间结果 : 最后的结果) (最后的结果) I: 控制相乘的次数 初始化
要求:用迭代的方法,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
排序算法是解决很多问题所需要的
Ex:在不同领域的广泛使用: 在不同领域的广泛使用: 在不同领域的广泛使用 生物信息的DNA序列分析 序列分析 生物信息的 Internet的网页(信息)的快速搜索 的网页(信息) 的网页 企业盈利的最大化 。。。
基于效率的考虑: 基于效率的考虑: 各种排序算法
查找: 查找:把一个特定的数据从列表中找到并提 供它所在的位置 对于列表数据有两种基本的方法: 对于列表数据有两种基本的方法: 顺序查找 从列表的第一个数据(或叫做元素)开始, 从列表的第一个数据(或叫做元素)开始, 但给定的数据和表中的数据匹配时, 但给定的数据和表中的数据匹配时,查找过 程结束,给出这个数据所在表中的位置。 程结束,给出这个数据所在表中的位置。 折半查找(二分法)(对排好序的数据) )(对排好序的数据 折半查找(二分法)(对排好序的数据) 从列表的一半开始,比较列表处于一半( 从列表的一半开始,比较列表处于一半(中 位置的数据, 间)位置的数据,判断是在前半部分还是后 半部分(根据列表的排序确定的)。 半部分(根据列表的排序确定的)。
5.7 算法的方法学
• • • • 贪心法 分治法 动态规划 回溯法
贪心法 (P109): : 以局部最优的方式做一个选择。 局部最优的方式做一个选择。 的方式做一个选择 Ex: 换硬币:为使所换的硬币数最小, 换硬币:为使所换的硬币数最小, 重复地选择不大于不足数额的最大面值 的硬币
“眼下能拿到的就先拿到” 眼下能拿到的就先拿到” 眼下能拿到的就先拿到
欧几里德( 欧几里德(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.3 算法的三种结构
根据结构化程序设计, 根据结构化程序设计,所有的程序都由三 种结构构成: 种结构构成:程序的逻辑结构 顺序结构 分支结构或条件结构 循环结构
顺序结构
A
B
Yes
分支结构
条件 条件 Noห้องสมุดไป่ตู้
A
B
按照命令出现的先 后顺序依次执行
根据设定的条件来决 定程序的执行方向
循环结构
A
A
条件 条件
问题的提出:求最大 最小问题 最小问题(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
第5章 算法基础 章
算法的概念 算法的分类和特性 算法的三种结构 算法的表示 算法的发现 常用算法 其他求解问题的算法 数据表达和数据结构
5.1 算法的概念
1)问题 ) 2)采取的方法和步骤 )
• 广义地说,为解决问题而采用的方法和步骤就 广义地说, 是算法。在计算机中,算法是程序设计的基础, 是算法。在计算机中,算法是程序设计的基础, 算法的质量直接影响程序运行的效率。 算法的质量直接影响程序运行的效率。 • 根据图灵理论,只要能够被分解为有限步骤的 根据图灵理论, 问题就可以被计算机执行。 问题就可以被计算机执行。 • 在计算机领域,算法描述主要就是为了能够将 在计算机领域, 算法的步骤变成计算机能够用它的语言所实现 的表示方式。 的表示方式。 • 算法的正式定义:算法是求解问题步骤的有序 算法的正式定义: 集合,它能够产生结果并在有限时间内结束。 集合,它能够产生结果并在有限时间内结束。
算法:求两个正整数 和 的最大公约数 算法:求两个正整数A和B的最大公约数
• 欧几里德(Euclid)算法 欧几里德( )
第一步:比较 和 这两个数 这两个数, 第一步:比较A和B这两个数,将A设置 设置 为较大的数, 为较小的数 为较小的数; 为较大的数,B为较小的数; 第二步: 除以 除以B,得到余数R1; 第二步:A除以 ,得到余数 ; 第三步:如果R1等于 等于0, 第三步:如果 等于 ,则最大公约数 就是B;否则将B赋值给 赋值给A, 就是 ;否则将 赋值给 ,R1 赋值给B,重复进行第二步、 赋值给 ,重复进行第二步、 第三步。 第三步。
问题的提出:求数的位数 问题的提出:求数的位数(p105)
给定一个整数n, 如何计算得到它的位数? 给定一个整数 如何计算得到它的位数?
Start set count = 1 input n while n ≠0 do n = n/10 count = count + 1; end while Output count End
排序: 排序 将一组原始数据按照递增或递减的规 律进行重新排列。 律进行重新排列。 冒泡法排序。 冒泡法排序。 从列表的最后开始比较相邻的两个 将较小的向前移动, 数,将较小的向前移动,再和前一个相 邻的数据比较, 邻的数据比较,同样把较小的数向前移 动,直到列表的开始。接着继续这个过 直到列表的开始。 程,找到的次小的数排到列表的第二个 位置,依次类推,直到结束。 位置,依次类推,直到结束。 p108
一种常用的计算方法) 迭代 (一种常用的计算方法)
一种建立在循环基础上的算法。 一种建立在循环基础上的算法。 不断用变量的旧值递推新值的过程 举例: 判断一个整数是否为素数” 举例:“判断一个整数是否为素数”的迭代算法 算法思路:素数是指只能被1和它本身整除的数 和它本身整除的数。 算法思路:素数是指只能被 和它本身整除的数。判 断它的方法为: 是要被判断的整数) 断它的方法为:将n(设n是要被判断的整数)作为 ( 是要被判断的整数 被除数,用2~(n-1)之间的各个整数轮流去除, 被除数, ( )之间的各个整数轮流去除, 如果都不能整除, 是素数。 如果都不能整除,则n是素数。 是素数
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
基本算法 求和 累积 求最大值和最小值 求数的位数 初始化 判断条件 计算的关键步骤 结果(存储) 结果(存储)
问题的提出: 问题的提出:求100-1000以内的水仙花 以内的水仙花 数(p103)
水仙花数:一个 位正整数的每一位数的 位正整数的每一位数的n次 水仙花数:一个n位正整数的每一位数的 次 幂之和等于这个数本身, 幂之和等于这个数本身 如153 = 13+53+33
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的阶乘。
5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1
排序: 排序 将一组原始数据按照递增或递减的规 律进行重新排列。 律进行重新排列。 选择法排序 (如果是从小到大排序的 如果是从小到大排序的 话) 把表中最小的数找到并放入第一个 位置,然后比较余下的数, 位置,然后比较余下的数,找到次小的 数放到第二个位置, 数放到第二个位置,直到对所有数据全 部扫描过。 部扫描过。 p107