- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈夫曼编码问题 优化子结构 设x和y是给定字符集C中权重最小的两个字符 在最优二叉树T中,x和y是两个最深的叶子且互为兄弟 设z是x和y的父亲,将z看作一个新的字符,权重为f(z) = f(x) + f(y) 要证明:T’=T - {x, y}是针对字符集C’= C–{x, y}+{z}的最优前缀二叉树 哈夫曼编码问题 对于C-{x, y}中的字符a f(a) dT(a) = f(a) dT’(a) 计算B(T’)时对于z f(z) dT’(z) 计算B(T)时对于x和y f(x) dT(x) +f(y) dT(y) B(T)=B(T’)+f(x)+f(y) T’=T - {x, y}是针对字符集C’= C–{x, y}+{z}的最优前缀二叉树 哈夫曼编码问题 结论 贪心算法可以获得哈夫曼编码问题的最优解 单源最短路径 输入 有向带权图G=(V, E) 对于E中的任意一条边e,其长度为c(e) V中的一个顶点t ——源 输出 图中t到每个顶点的最短路径长度 单源最短路径 贪心算法(Dijkstra算法) 设置集合S来保存所有(t到其)最短路径长度已知的顶点,初始时S={t} 用dist(v)来记录t到v的最短特殊路径的长度 如果从t到v的路径中间只经过S中的顶点,这样的路径叫做特殊路径,初始时 dist(v) =c(t, v) 如果存在边(t, v) dist(v) =INFINITY 如果不存在边(t, v) 算法每次从V - S中找出dist最小的顶点u, 将u加入S中 更新V - S中其它顶点v的dist(v) 如果 dist(u) + c(u, v) dist(v) ,则更新dist(v) 单源最短路径 Dijkstra算法 t=1 迭代 S dist[2] dist[3] dist[4] dist[5] 初始 {1} 10 +? 30 100 1 {1,2} 10 60 30 100 2 {1,2,4} 10 50 30 90 3 {1,2,4,3} 10 50 30 70 4 {1,2,4,3,5} 10 50 30 70 单源最短路径 时间复杂性 S被扩充n-1次 每次扩充选择u需要O(n)时间 每次扩充更新节点的dist(v)需要O(n)时间 总时间:O(n2) 单源最短路径 贪心选择性 每次从V - S中选择dist最小的顶点u加入到S中是正确的 即从t到u的最短特殊路径就是从t到u的最短路径 单源最短路径 优化子结构 设u加入S之前(老S)V - S中每个顶点v的dist(v)确实是 t 到v的最短特殊路径长度 要证明:每次向S新加入u之后(新S),更新V – S中其它顶点v的dist(v)是正确的 即更新后的dist(v)确实是t到v的最短特殊路径长度 如果 dist(u) + c(u, v) dist(v) ,则更新dist(v) 单源最短路径 结论 Dijkstra算法可以获得单源最短路径问题的最优解 最小生成树 生成树 对于无向图G=(V, E),如果G的子图T包含了G中的所有顶点且T是一棵树,则T称为G的生成树 最小生成树 最小生成树问题 输入:无向带权图G=(V, E) 对于G中的任意一条边e,其权值为c(e) 输出:G的最小生成树T 在所有生成树中T的权值最小 T的权值为T中所有边的权值之和 最小生成树 最小生成树的性质 给定图G=(V, E),设U是V的真子集 设边(a, b) 是所有连接U和V-U的边中权值最小的边 a?U, b?V-U 结论:G的最小生成树中一定包含边(a, b) 最小生成树 Prim算法 : 输入:无向连通带权图G=?V,E? 输出:G的最小生成树 1. 取G中的任意节点v0,T={v0}。 2. 找到权值最小的边(a, b)满足a∈T, b∈V-T。 3. T=T∪{b} 4.反复做第2、3步直到所有节点都加入T中。 Seven Deadly Sins Lust Gluttony Greed Sloth Wrath Envy Pride 急功近利? 向着某一天终于要达到的那个终极目标迈步还不够,还要把每一步骤看作目标,使它作为步骤而起作用。? ——歌德 贪心算法 张可佳 内容 贪心算法的基本概念 贪心算法获得最优解的基本条件 优化子结构 贪心选择性 应用贪心算法解决 活动安排问题 最优装载问题 哈夫曼编码问题 单源最短路径问题 最小生成树问题 贪心算法的基本概念 贪心算法 解决优化问题 策略:逐步解决问题。总是作出当前看起来最好的选择,即局部最优解 贪心算法的基本概念 例1 给定4种硬币(五毛、一毛、五分、一分) 用最少的硬币找顾客n毛n分(六毛三分) 贪心算法 当前看起来最优的选择(局部最优解):每次选不超过余额的面值最大的硬
文档评论(0)