- 1、本文档共105页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-分治算法
各种排序方法实验比较 实验数据图表表示 14.2.4 选择问题 问题描述 求数组a[0:n-1]中第k小的元素——升序排列中,位于第k个位置的元素 [(12,a),(4,b),(5,c),(4,d),(5,e),(10,f),(2,g),(20,h)]?[(2,g),(4,d),(4,b),(5,c),(5,e),(10,f),(12,a),(20,h) ]k=1:(2, g)k=2:(4, d)k=3:(4, b) 选择问题 特别有用的:中值问题,k=n/2 简单解法:排序,然后取第k元,O(nlogn) 更好的算法:利用快速排序列表划分的方法 一次划分后,pivot位于j j=k,找到 kj,继续对left进行划分 kj,继续对right进行划分 重复上述步骤,直到中央元位置等于k为止 实现 templateclass T T select(T a[], int l, int r, int k) {// Return kth smallest in a[l:r]. if (l = r) return a[l]; int i = l, // left to right cursor j = r + 1; // right to left cursor T pivot = a[l]; 实现(续) // swap elements = pivot on left side // with elements = pivot on right side while (true) { do {// find = element on left side i = i + 1; } while (a[i] pivot); 实现(续) do {// find = element on right side j = j - 1; } while (a[j] pivot); if (i = j) break; // swap pair not found Swap(a[i], a[j]); } 实现(续) if (j - l + 1 == k) return pivot; // place pivot a[l] = a[j]; a[j] = pivot; // recursive call on one segment if (j - l + 1 k) return select(a, j+1, r, k-j+l-1); else return select(a, l, j-1, k); } 复杂性分析 最坏情况显然为Q(n2) 改进 达到Q(n),中心元选择——“中间的中间” 将n个元素分为n/r组,r为整常数,每组r个元素 对每组r个元素进行排序,O(1) (r为常量,与n无关) ,选出每组中心元素 选取n/r个(非常量)中心元素的中心元素——递归使用选择算法 改进算法例 r=5,n=27,a=[2, 6, 8, 1, 4, 10, 20, 6, 22, 11, 9, 8, 4, 3, 7, 8, 16, 11, 10, 8, 2, 14, 15, 1, 12, 5, 4] 分为6组:[2,6,8,1,4],[10,20,6,22,11],[9,8,4,3,7],[8,16,11,10,8],[2,14,15,1,12]和[5,4] 每组的中间元素分别为4,11,7,10,12和4 改进算法例 [4,11,7,10,12,4]的中间元素为7——作为pivot left=[2,6,1,4,6,4,3,2,1,5,4]middle=[7],right=[8,10,20,22,11,9,8,8,16,11,10,8,14,15,12] 若k12,则仅仅需要在left中寻找;k=12,pivot——7即为所求;k12,继续有哪些信誉好的足球投注网站right 分治排序伪代码 templateclass T void sort(T E, int n) { //对E中的n个元素进行排序,k为全局变量 if (n=k) { i=n/k; j=n-i; 令A包含E中的前i个元素 令B包含E中余下的j个元素 sort(A, i); sort(B, j); merge(A,B,E,i,j,);//把A和B合并到E } else 使用插入排序算法对E进行排序 } 复杂性分析 伪代码细化 k=2:二路归并排序(two-way merge sort) 链表描述性能最好 temp
您可能关注的文档
- 我的家乡-同心.ppt
- 我的登上地球之巅.ppt
- 成功心态及职业发展专题讲座.ppt
- 成本管理会计讲义.ppt
- 我的情绪我控制.ppt
- 户外帐篷选择锦囊.ppt
- 房地产代理公司销售培训指南.ppt
- 战略管理重点复习课件.ppt
- 房地产建筑相关知识教程.ppt
- 战胜惰性告别三闲高三集体班会.ppt
- 建设工程合同补充合同2024年范本版B版.docx
- 2025年浙江华川实业集团有限公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解.docx
- 天然气在风能产业中的应用考核试卷.docx
- 2025年浙江华威实业集团有限公司校园招聘模拟试题附带答案详解汇编.docx
- 建设工程协议条款深入分析及优化建议(2024版)版B版.docx
- 建设工程合同工程合同管理.docx
- 建设工程劳务分包合同协议(2024版).docx
- 建设工程劳务分包合同协议(2024版).docx
- 2025年浙江华成控股集团有限公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解.docx
- 建设工程人防检测合同范本通用.docx
最近下载
- 19S306图集—居住建筑卫生间同层排水系统安装.pdf
- (自考财务管理学00067最全公式整理.doc VIP
- 《氧化还原反应》优教课件(第一课时).pptx VIP
- 异常早期妊娠超声诊断与鉴别诊断幻灯片.ppt VIP
- 00067财务管理学公式.pdf VIP
- 2025福建厦门大学资产与后勤事务管理处工程管理人员招聘2人笔试备考题库及答案解析.docx
- 2024年教师批评与自我批评发言稿范本(3篇).docx VIP
- 2024年小学党员教师批评与自我批评发言稿12篇.docx VIP
- 2024年教师党员个人批评与自我批评发言稿.docx VIP
- Unit 5 Dinner is ready Part B Let’s talk单元整体教学设计.docx
文档评论(0)