版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 分 治 法1234分治法的设计思想排序问题中的分治法组合问题中的蛮力法5几何问题中的蛮力法小结1 分治法的设计思想凡治众如治寡,分数是也;斗众如斗寡,形名是也。 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。1 分治法的设计思想1 分治法的设计思想(1)划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,
2、分治算法的有效性很大程度上依赖于合并的实现。 分治法的求解步骤人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。即将一个问题分成大小相等的 k 个子问题的处理方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡子问题的思想,它几乎总是比子问题规模不等的做法要好。分治法的求解步骤分治法的求解步骤DivideConquer(P) if (P的规模足够小) 直接求解P; else 分解为k个子问题P1, P2, , Pk; for (i=1; ilen,符合情况n=9排序问题中的分治法快速排序快速排序(Quicksort)是Hoare在26岁时给出的一个算法。1986
3、年,何积丰和Hoare提出了程序分解算子,并将规范语言与程序语言看成是同一类数学对象。 r1 rn/2 rn/21 rn 划分r1 rn/2 rn/21 rn 递归处理r1rn/2rn/21 r n 合并解排序问题中的分治法快速排序void MergeSort(int r , int r1 , int s, int t) if (s=t) r1s=rs; else m=(s+t)/2; Mergesort(r, r1, s, m); Mergesort(r, r1, m+1, t); Merge(r1, r, s, m, t); void Merge(int r , int r1 , int
4、s, int m, int t) i=s; j=m+1; k=s; while (i=m & j=t) if (ri=rj) r1k+=ri+; else r1k+=rj+; while (i=m) r1k+=ri+; while (j=t) r1k+=rj+; 排序问题中的分治法快速排序二路归并排序算法的递推式:当n=2k时,可得T(n)=2(2T(n/4)+n/2)+n=4T(n/4)+2n=4(2T(n/8)+n/4)+2n=2kT(1)+kn=nlog2n如果2kn0时,将2k2k棋盘分割为4个2k-12k-1 子棋盘,特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为
5、了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘11。 组合问题中的分治法棋盘覆盖问题 public void chessBoard(int tr, int tc, int dr, int dc, int size) if (size = 1) return; int t = tile+, / L型骨牌号 s = size/2; / 分割棋盘 / 覆盖左上角子棋盘 if (dr tr + s & dc tc + s) / 特殊方格在此棋盘中 chessBoard(tr,
6、 tc, dr, dc, s); else / 此棋盘中无特殊方格 / 用 t 号L型骨牌覆盖右下角 boardtr + s - 1tc + s - 1 = t; / 覆盖其余方格 chessBoard(tr, tc, tr+s-1, tc+s-1, s); / 覆盖右上角子棋盘 if (dr = tc + s) / 特殊方格在此棋盘中 chessBoard(tr, tc+s, dr, dc, s); else / 此棋盘中无特殊方格 / 用 t 号L型骨牌覆盖左下角 boardtr + s - 1tc + s = t; / 覆盖其余方格 chessBoard(tr, tc+s, tr+s-1
7、, tc+s, s); / 覆盖左下角子棋盘 if (dr = tr + s & dc = tr + s & dc = tc + s) / 特殊方格在此棋盘中 chessBoard(tr+s, tc+s, dr, dc, s); else / 用 t 号L型骨牌覆盖左上角 boardtr + stc + s = t; / 覆盖其余方格 chessBoard(tr+s, tc+s, tr+s, tc+s, s); 组合问题中的分治法棋盘覆盖问题设T(k)是算法覆盖一个2k2k棋盘所需时间,从算法的划分策略可知,T(k)满足如下递推式: 解此递推式可得T(k)=O(4k)。由于覆盖一个2k2k棋盘所需的骨牌个数为(4k-1)/3。 组合问题中的分治法棋盘覆盖问题几何问题中的分治法最近对问题设p1=(x1,y1), p2=(x2,y2), , pn=(x1,y1),是平面上n个点构成的集合S,最近对问题就是找出集合S中距离最近的点对。你想到些什么?几何问题中的分治法最近对问题最近对问题的分治策略是:划分:将集合S分成两个子集S1和S2,设集合S的最近点对是pi和pj(1i,jn),则会出现以下三种情况: 求解子问题:对于划分阶段的情况和可递归求解,如果最近点对分别
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版药品GMP总则精要
- 公开课教学艺术
- 《GBT 34998-2017 移动终端浏览器软件技术要求》专题研究报告
- 《宠物鉴赏》课件-犬展的起源与历史
- Tiamo-basical-database参考资料说明
- 元宇宙展会信息策划服务协议
- 智能检测行业机器视觉检测工程师岗位招聘考试试卷及答案
- 种子行业杂交种子研发工程师岗位招聘考试试卷及答案
- 2026年护理工作计划3篇
- 2026学年教师培训工作计划(3篇)
- 混凝土砌块基础知识培训课件
- 全新版尹定邦设计学概论5
- 军品运输合同范本
- 治具维修基础知识培训课件
- 第一章 安培力与洛伦兹力 练习题 (含解析) 2024-2025学年物理人教版(2019)选择性必修第二册
- 跨文化感官差异-洞察及研究
- 2025一建《建设工程经济》精讲课程讲义
- 2025年全国事业单位联考D类《综合应用能力》真题及答案
- 2025CSCO非小细胞肺癌诊疗指南解读
- 护士长的精细化管理课件
- 酒店人力资源管理(第2版)全套教学课件
评论
0/150
提交评论