- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * of 158 求第k小的元素 long Select(k,S) { if (|S| ≤38) { 将S中的元素排成非递减序; return (S中的第k小元素); } else { 将S中的元素划分成长度等于5的 ?|S|/5? 个子序列; * * of 158 由各子序列的中值元素组成非递减序列M; m ←Select( ?|M|/2? ,M); 按m将S中的元素划分成小于m、等于 m和大于m的三个子序列S1,S2和S3; if (|S1|k) return(Select(k,S1)); else if (|S1| +|S2|≥k) return(m); else return(Select(k- |S1| -|S2|, S3)); } } * * of 158 求第k个小的元素(选择问题) m 中值序列M从小到大 已知小于或者等于m的元素 已知大于或者等于m的元素 按m将S中的元素划分成小于m、等于m和大于m的三个子序列S1,S2和S3; 从小到大 * * of 158 定理:算法Select 在O(n)时间内找出n个元素序列中的第k小的元素。 c n ≤38 T(?n/5?)+T(?3n/4?)+cn n38 T(n) ≤ T(n) =O(n) * * of 158 选择问题的应用之一 用选择算法找中位数作为划分标准,保证快速排序算法的子问题均衡, 使得快速排序算法最坏情况复杂性为O(nlogn)。 * * of 158 线性时间选择: 中位数引例 某公司有五个分公司依次设置在同一条铁路线的沿线A、B、C、D、E站。现在该公司希望在该铁路沿线设立一个仓库,要求该仓库离这五个站的火车行驶距离之和最小。如用数轴表示该铁路线,A、B、C、D、E各站的坐标依次为a、b、c、d、e(abcde),则经过数学计算,该仓库大致应设置在坐标 (1) 处。 (1)A. c B. (a+b+c+d+e)/5 C. (a+2b+3c+2d+e)/9 D. (a+4b+6c+4d+e)/16 * * of 158 线性时间选择: 中位数应用 中位数原理 X轴上有n个点,由左至右依次排列为 找一个点xp(不一定是n个点之一),使xp到各 点距离和最小,解为: x1 x2 xp xn x 即解为中位数或中位数的平均值。 * * of 158 线性时间选择: 中位数应用 主油管道最优位置问题 主油管道为东西向,确定主油管道的南北位置,使南北向油井喷油管道和最小。要求线性时间完成。 * * of 158 线性时间选择: 中位数应用 问题分析 - 设n口油井的坐标(xi,yi) i=1,…,n,主管道的y坐标为yk。 -显然,问题只要求y坐标的中位数即可。 注:如果用排序方法,则T(n)=O(nlogn)达不到线性时间要求。 * * of 158 【例】残缺棋盘 残缺棋盘是一个有2k×2k (k≥1)个方格的棋盘,其中恰有一个方格残缺。图中给出k=1时各种可能的残缺棋盘,其中残缺的方格用阴影表示。 ? 称作“三格板”,残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。 ①号 ②号 ③号 ④号 * * of 158 在此覆盖中要求: 1)两个三格板不能重叠 2)三格板不能覆盖残缺方格,但必须覆盖其他所有的方格 在这种限制条件下,所需要的三格板总数为 (2k×2k -1 )/3。 * * of 158 问题分解过程: 以k=2时的问题为例,用二分法进行分解,得到如下图,用双线划分的四个k=1的棋盘。 ①号 ②号 ③号 ④号 * * of 158 其它4*4的残缺棋盘 ①号 ②号 ③号 ④号 * * of 158 棋盘的识别 棋盘的规模是一个必要的信息,有了这个信息,只要知道其左上角的方格所在行、列就可以唯一确定一个棋盘
文档评论(0)