- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法 减治法
假币问题(续) 时间效率分析 输入规模:硬币数 n 基本操作:称重(比较操作) 效率类别:有最佳、最差、平均效率情况 增长函数:称重次数与硬币数 n 的函数关系 T(n) = ? 1. 最佳效率 T(n) = 1 ( n 为奇数 ) 2. 最差效率 解此递推式,得 本算法并非最高效的算法!更高效的策略是: 每次把 n 个硬币分为 3 堆,常因子 = 3,每次减去问题规模的2/3 . 称重次数约为 log3n, 比 log2n 更小。 需要作 1 次称重 将问题规模减半 减常因子法——俄式乘法 减常因子法算例 —— 俄式乘法(俄国农夫法) 问题:两个正整数相乘。十九世纪,俄国农民广泛采用该算法,不需 使用九九乘法表。文献介绍,埃及数学家早在公元前 1650 年 就使用了该算法思想。 算法策略 n 和 m 为两个正整数,计算它们的乘积。问题规模选择 n ,采用减治 策略,可得递推式:(规模减半,常因子 = 2) n为偶数: n为奇数: 算法停止: n = 1 时停止:1×m = m 算法实现:递归法、非递归法 减常因子法——俄式乘法过程举例 俄式乘法过程举例 计算 50×65 n m 50 65 25 130 12 260 +130 6 520 3 1040 1 2080 +1040 结果:2080 + 130 + 1040 = 3250 简评:硬件实现速度非常快!(理由?) 用移位操作完成十进制数 折半(右移1位)和 加倍(左移1位) 移位属于机器的基本操作,执行速度非常快。 减可变规模算法 减可变规模法 减治法的第 3 个主要变种,每次减小的问题规模不一样 譬如,求最大公约数的欧氏算法: gcd(m, n) = gcd(n, m mod n) , 第 k 轮除数 nk ← mk-1 mod nk-1 、 被除数 mk ← nk-1 取决于前一轮 m 和 n 值大小。各轮 m、n 值比较 前一轮,减小的幅度是变化的 查找问题例 —— 查找中值(中位值) 找出 n 元列表中第 k 个最小元素(第 k 个顺序统计量) A = { 1, 2, 1, 3, 4, 3, 5, 5 } 的第 k = 4 最小元素为 3,记为 A4 = 3 理解:非降序排序后的位置 { 1, 1, 2, 3, 3, 4, 5, 5 } k = 1: 找最小元素 A1 = 1 = Amin k = n: 找最大元素 A8 = 5 = Amax :中值 —— 有序列表的中位值,不是均值! 选择问题特例——查找中值(续1) 中值查找算法 1. 蛮力策略 对列表 排序 后选中值。时间效率取决于排序算法的效率。 若用合并排序算法,即为 O(nlogn) 型。 2. 减治策略 —— 更高效(效率分析类似于快速排序,略) s = k:A[s] = 中值 —— 停止条件 s k:分裂点在中位点右边,左子区继续分解 s k:分裂点在中位点左边,右子区继续分解 西华大学数学与计算机学院 黄襄念 西华大学数学与计算机学院计算机系 黄襄念 编 eMail: huangxn@ Tel第 5 章 减治法 算法策略 插入排序 深度优先搜索DFS 广度优先搜索BFS 拓扑排序 生成组合对象 减常因子法 减可变规模法 本章习题 概念与算法策略 算法策略 减治法:利用给定规模与较小规模问题解之间的关系求解问题的方法。 实现 —— 从顶向下:规模减小(递归) 从底向上:规模增大(非递归) 减常量法:常量通常为1(减 1 法) 减常因子法:常因子通常为 2(减半法) 减可变规模法:每次减去的规模不同 原问题(规模n) 子问题(规模n-1) 子问题解 原问题解 子问题(规模n/2) 子问题解 原问题解 原问题 (规模n) × 插入排序 插入排序 对 n 个元素 A [ 0, ... , n-1 ]
文档评论(0)