第十一章算法设计方法说课材料

上传人:yuzo****123 文档编号:137968983 上传时间:2020-07-13 格式:PPT 页数:61 大小:1.04MB
返回 下载 相关 举报
第十一章算法设计方法说课材料_第1页
第1页 / 共61页
第十一章算法设计方法说课材料_第2页
第2页 / 共61页
第十一章算法设计方法说课材料_第3页
第3页 / 共61页
第十一章算法设计方法说课材料_第4页
第4页 / 共61页
第十一章算法设计方法说课材料_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第十一章算法设计方法说课材料》由会员分享,可在线阅读,更多相关《第十一章算法设计方法说课材料(61页珍藏版)》请在金锄头文库上搜索。

1、第十一章 算法设计方法,11.1 分治法 11.2 动态规划 11.3 贪心法 11.4 回朔法 11.5 分枝限界法,11.1 分治法,对于一个输入规模为n的问题,用某种方法把输入分割成k个子集(1kn),从而产生k个子问题,k个子问题解决后,再用某种方法组合成原来问题的解。,分治法:分而治之,一、排序算法中的分治法,选择排序 将n个元素放在一个数组中, 先通过n-1次比较选出其中的最小元素,与第1个元素交换 再在剩下的n-1个元素中选出最小的元素,与第2个元素交换 .,T(n)=O (n2),归并排序,快速排序,从输入序列中随机的抽取一个元素a, 以a为界,把全体元素分成: S1 S2 S

2、3 小于a 等于a 大于a 若S1、S3排好序了,则全体元素就有序了, 而S1、S3的排序又可以用这种方法,void Qsort(SqList /对高子表递归排序 /Qsort,T(n)=O(nlog2n),该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题; 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题;,分治法选用,11.2 动态规划,历史不会重演,10,F(n) =,1if n = 0 or 1 F(n-1) + F(n-2)if n 1,递归算法的伪代码: F(n) 1i

3、f n=0 or n=1 then return 1 2elsereturn F(n-1) + F(n-2),考虑Fibonacci序列F(n),11,计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,12,计算F(7),计算F(2)重复8次!,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,

4、F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,13,The execution of F(7),计算 F(3) 重复 5 次!,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,14,计算 F(7),多次重复计算! 如何避免?,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,

5、F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,15,改进的想法,备忘录 当 F1(i)被计算后,保存它的值 当再次计算F1(i)时,只需要从内存中取出即可,F1(n) 1 if vn 0 then 2 vn F1(n-1)+F1(n-2) 3 return vn,Main() 1 v0 = v1 1 2 for i 2 to n do 3 vi = -1 4 output F1(n),16,再计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F

6、2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,F(i)=Fi,17,再计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,18,再计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F

7、5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,19,再计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,20,再计算F(7),v0 v1 v2 v3 v4

8、v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,21,再计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F0,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,22,F1,F0,再

9、计算F(7),v0 v1 v2 v3 v4 v5 v6 v7,F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,23,F1,F0,F2,F1,F0,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,v0 v1 v2 v3 v4 v5

10、v6 v7,24,F1,F0,F2,F1,F0,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F2,F1,F0,F2,F1,F0,F4,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,v0 v1 v2 v3 v4 v5 v6 v7,25,F1,F0,F2,F1,F0,F2,F1,F0,F2,F1,F0,F3,F1,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F4,F4,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,v0

11、 v1 v2 v3 v4 v5 v6 v7,26,F1,F0,F2,F1,F0,F2,F1,F0,F2,F1,F0,F3,F1,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F1,F4,F4,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,v0 v1 v2 v3 v4 v5 v6 v7,27,F1,F0,F2,F1,F0,F2,F1,F0,F2,F1,F0,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F

12、0,F2,F1,F4,F4,v0 v1 v2 v3 v4 v5 v6 v7,28,F1,F2,F1,F0,F2,F1,F0,F2,F1,F0,F4,F3,F3,F3,F2,F1,F0,F2,F1,F0,F2,F1,F0,F1,F1,F1,F1,再计算F(7),F7,F6,F5,F5,F4,F3,F3,F2,F1,F0,F2,F0,F1,F4,v0 v1 v2 v3 v4 v5 v6 v7,29,新的实现节约了大量的时间,我们能够做得更好吗?,注意到 使用备忘录虽然可以减少重复计算,但是仍然需要函数调用以及参数,这些会浪费许多时间 . 事实上,计算F(i),我们只需要计算F(i-1) 其中每棵二

13、叉树Ti只有一个权为Wi的根结点, 左右子树均空 (2)在F中选取两棵根结点权值最小的树作为左右子树, 设为Ti,Tj, 构造一棵新的二叉树Tk, 且Ti、Tj根结点的权值之和为 新的二叉树Tk的根结点的权值 (3)把Ti ,Tj从F中删去,把Tk插入到F中 (4)重复(2),(3)直到F中只含有一棵树为止, 此树即为哈夫曼树,n = 2, Huffman树一定是带权路径长度最短的二叉树(最优树) 假设有n-1个叶结点的Huffman树是最优树,设一棵Huffman树 T 有 n 个叶结点(n=2), 并假设w0w1wn-1 记 V 是频率为 w0 和 w1 的两个字符的父结点 那么w0、 w1是树 T 中最深的结点 T 中结点 V 换为一个叶结点 V(权等于w0 + w1) , 得到另一棵树 T 根据归纳假设,T具有最小的外部路径长度 把 V展开为V( w0 + w1 ), T还原为 T, 则 T 也应该是带权路径长度最小的 定理成立,普里姆算法Prim 设N=(V,E)为连通网 用TE表示N上最小生成树边的集合 (1)从V中选一顶点u0加入U,TE= (2)对所有uU,vV-U,(u,v)E,找一条代价最小的边(u0,v0)加入TE,并把v0加入U (3)重复(2),直到U=V为止, 则(V,TE)为N的最小生成树,11.4 回溯法,进行系统搜索的一种方法 尽可

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号