- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心算法-四川农业大学
4.2 贪心算法的基本要素 50 背包 10 20 30 ¥60 ¥100 ¥120 物品 60 10 100 20 80 20 120 ——×20 30 ¥240 背包问题 100 20 120 30 60 10 100 20 6010 120 30 0-1背包问题 ¥220 ¥160 ¥180 4.3 最优装载 问题描述 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 问题可形式化描述为 xi=0表示不装入集装箱i xi=1表示装入集装箱i 4.3 最优装载 算法分析 贪心选择性质 可以证明最优装载问题具有贪心选择性质。 最优子结构性质 最优装载问题具有最优子结构性质。 由最优装载问题的贪心选择性质和最优子结构性质,容易证明算法loading的正确性。 算法发杂性: 算法Loading的主要计算量在于将集装箱依重量从小到大排序,故算法所需的计算时间为O(nlogn)。 4.3 最优装载 算法描述 最优装载问题可用贪心算法求解。采用重量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。具体算法如下 /// summary 贪心最优装载问题/summary /// param name=w物品重量/param /// param name=c货船容量/param /// returns结果0-1序列/returns public static int[] Loading(int[] w, int c) { int n = w.Length; int[] x = new int[n]; int[] t = SortedArrayIndex(w);//原数组升序排列下标 for (int i = 0; i n; i++) x[i] = 0;//全部初始化为0 for (int i = 0; i n w[t[i]] = c; i++) { x[t[i]] = 1; c -= w[t[i]]; //装一件后,容量减少 } return x; } 4.4 哈夫曼编码 哈夫曼编码 广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%-90%之间。 哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。 给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。 4.4 哈夫曼编码 例如 一个包含100,000个字符的文件,各字符出现频率不同,如下表所示 定长编码需要300,000位,变长编码方案总码长 (45×1+13×3+12×3+16×3+9×4+5×4)×1000=224,000。 压缩率(压缩算法效率的标准度量,少用多少空间) (300-224) /300×100% ≈ 25% a b c d e f 频率(千次) 45 13 12 16 9 5 定长码 000 001 010 011 100 101 变长码 0 101 100 111 1101 1100 4.4 哈夫曼编码 4.4.1前缀码 对每一个字符规定一个0,1串作为其代码,并要求任一字符的代码都不是其它字符代码的前缀。这种编码称为前缀码。 编码的前缀性质可以使译码方法非常简单。对于给定的0,1串001011101,采用下编码表,可唯一的分解为0,0,101,1101,所以其译码为aabe。 a b c d e f 频率(千次) 45 13 12 16 9 5 定长码 000 001 010 011 100 101 变长码 0 101 100 111 1101 1100 4.4 哈夫曼编码 可用二叉树作为前缀编码的数据结构。 在表示前缀码的二叉树中,树叶代表给定字符,并将每个字符的前缀码看作是丛树根到该叶子的一条路径。 代码中0,1分别指示某节点到左右儿子的“路标”。 表示最优前缀码的二叉树总是一棵完全二叉树,即树中任一结点都有2个儿子结点。 若C为编码字符集,则表示最优前缀码的二叉树恰有|C|个叶子,每个叶子对应一个字符,有|C|-1个内部节点。 4.4 哈夫曼编码 平均码长定义为 使平均码长达到最小的前缀码编码方案称为给定编码字符集C的最优前缀码。 4.4 哈夫曼编码 4.4 哈夫曼编码 4.4.2 构造哈夫曼编码 哈夫曼提出构造最优前缀码的贪心算法,以自底向上的方式构造表示最优前缀码的二叉树T。 算法以|C|个叶结点开始,执行|C|-1次的“合并”运算后产生最终所要求的树T。 ①初始化|C|个单结点的树,概率记在树根中,指示树的权重(树的权重等于所有叶子权重之和); ②重复③
您可能关注的文档
最近下载
- 2025年安徽皖江高速公路有限公司高速公路收费人员招聘笔试模拟试题及答案解析.docx VIP
- T GXTC 0014—2024 新式(现制)茶饮 茉莉花茶基底茶.pdf VIP
- 急性视网膜坏死综合征.pptx VIP
- 正常人体解剖学资料.pdf
- 《相遇问题》(说课稿)-2024-2025学年四年级上册数学青岛版[001].docx VIP
- 外伤性感染性眼内炎防治专家共识(2023年版)PPT.pptx VIP
- 第1节 功(教学课件)物理沪粤版2024九年级上册.pptx VIP
- 违规接受吃请检讨书(推荐).docx VIP
- 2024新人教版一年级数学上册认识立体图形第三单元教材整体分析.pdf VIP
- 密码技术应用员理论知识题及答案.doc VIP
文档评论(0)