- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 分治法(Divide Conquer)
(算法常用技术之首)
六大算法常用技术:
分治法(e.g. 快速排序)贪心法(局部最优法,e.g. 最小生成树)
周游法(e.g. DFS, BFS)回朔法(e.g. 8皇后问题,平面点集的凸包)
动态规划法 分枝定界法(e.g. 整数规划)
快速排序的思想:
用O(n)的时间把一个规模为n的表分割为两段,
前段中的数据元素均小于后段中的数据元素,
然后对分割后所得的两个小一点的表采用同样的方法分别进行排序;当两个小表排好之后,整个表的排序也就完成了。
分治法的要领
分治法是把一个规模较大的问题分解为若干个规模较小的子问题,
这些子问题相互独立且与原问题同类;
首先求出这些子问题的解,
然后把这些子问题的解组合起来得到原问题的解。
由于子问题与原问题是同类的,故使用分治法很自然地要用到递归。
因此分治法分三步:
1 将原问题分解为子问题(Divide)
2 求解子问题(Conquer)
3 组合子问题的解得到原问题的解(Combine)
分治法举例:给定n个数据元素,要找出其中的最大元和最小元。
简单直观的方法:
一个一个地找,用n-1次比较来找出最大元,再用n-2次比较来找出最小元。比较次数(基本运算)为2n-3次。
用分治法如何求解?(参看Aho书,P60, 图2.12)
当n=2时,一次比较就可以找出两个数据元素的最大元和最小元。
当n2时,可以把n个数据元素分为大致相等的两半,
一半有?n/2?个数据元素,而另一半有?n/2?个数据元素。
先分别找出各自组中的最大元和最小元,然后
将两个最大元进行比较,就可得n个元素的最大元;
将两个最小元进行比较,就可得n个元素的最小元。
因此算法的时间复杂度为:
T(n)= 此方程可用主定理求解:
a=2, b=2, f(n)=2, =n1, f(n)比的量级低(第一种情况);
所以可得T(n)= ? ()= ?(n)。
但此法还不够精确。(简单直观的算法的时间复杂度也只有2n-3。)
设n=2k, 根据递归方程有T(2k)=2T(2k-1)+2,
令T(2k)=g(k) (函数变形法),
则有g(k)=2g(k-1)+2,
从而有g(k-1)=2g(k-2)+2,g(k-2)=2g(k-3)+2,…
不断使用代入法可得:T(n)=T(2k)=
g(k) = 2(2g(k-2)+2)+2
= 22g(k-2)+22
= 23g(k-3)+23+22
= …
=2k-1g(1)+2k-1+ … +23+22+2
=n/2*T(2) + (2k-2)
= n/2+n-2 = 3n/2-2, 即T(n)=3n/2-2。
当n?2k时,则n可表为若干2的正整数幂之和,(e.g. 42=32+8+2),
若n是偶数,则算法的时间复杂度仍可达到3n/2-2。
e.g. 对n=42,将元素分为32个一组,8个一组和2个一组共3组后,
各组找出最大、最小元分别需要46,10和1次比较,
3个最大元用2次比较即可得整体最大元,同理
3个最小元用2次比较即可得整体最小元,故有46+10+1+2+2=61,
而3n/2-2=3*42/2-2也等于61,故的确是3n/2-2。
一般地,当n?2k但为偶数时,则可将n分解为若干2的正整数幂之和:
n=2m1+2m2+ … +2mk且m1m2 … mk?
对规模为ni=2mi的每组元素,找出最大、最小元需要3ni/2-2次比较,
故获得k组各自的最大、最小元需要=3n/2-2k;
然后用2k-2次比较就可从每组的最大元、最小元(均为k个)中
求出整体的最大元和最小元,故全部的比较次数仍为3n/2-2。
当n?2k但为奇数时,则可将n分解为若干2的正整数幂之和加1:
n=2m1+2m2+ … +2mk+1且m1m2 … mk?
由于2m1+2m2+ … +2mk=n-1,故=3(n-1)/2-2k;
注意此时共有k+1组最大、最小元,取得整体解还需比较2k次
(单独的一个元素既是该组最大元,也是该组最小元),
故全部的比较次数为3(n-1)/2即3n/2-3/2,亦可看成为?3n/2-2?。
已经证明,在规模为n的数据元素集合中找出最大元和最小元,
至少需要?3n/2-2?次比较,即?3n/2-2?是找最大最小元算法的下界。
因此,从比较次数最少的意义上来讲,
找最大最小元的分治法算法已经达到最优。虽然从理论上看,
将n分解为若干2的正整数幂之和可以获得最少的比较次数,
但实际计算时为简单起见,一般把n个数据元素分为大致相等的两半:一半有?n/2?个数据元素,而另一半有?n/2?个数据元素。
先分别找出各自组中的最大最小元
(如组中只有一个元素,则其既是最
您可能关注的文档
最近下载
- 13D101-1~4 110KV及以下电力电缆终端和接头.docx VIP
- 2025年高考化学(黑吉辽蒙卷) 真题详细解读及评析.docx
- 干式系统的工作原理.ppt VIP
- 周杰伦所有歌词(14张专辑-包括床边的故事)呕心沥血已经整理完毕可打印.doc VIP
- 英国文学史17th--Century-English---Literature4.ppt VIP
- 子宫颈癌筛查规范(2025年)解读课件PPT.pptx
- word模板:简约企业新闻报刊报纸排版设计word模板.docx VIP
- 露天矿开采(共117张课件).pptx VIP
- 人教版高中英语必修第一册Unit 2 教学课件 Reading and Thinking and Thinking.ppt VIP
- 2023心房颤动诊断和治疗中国指南(第二部分).docx VIP
文档评论(0)