�
�
�
��
�
�
1)(21
1)0(1
)(
n) F(n-)F(n-
n
nF
,
�
�
�
�
�
�
�
�����
���
�
��
�
1),()1,(
)1,(1
),(
1,11
),(
mnmmnfmnf
mnnnf
mnnnf
mn
mnf
二分搜索算法的基本思想是将 n 个元素分成个数大致相同的两半,取 a[n/2]与 x 作比较。
如果 x=a[n/2],则找到 x,算法终止。
如果 x<a[n/2],则我们只要在数组 a 的左半部分继续搜索 x。
如果 x>a[n/2],则我们只要在数组 a 的右半部分继续搜索 x。
按分治策略,将所有选手分为两组,n 个选手的比赛日程表就可以通过为 n/2 个选手设计的
比赛日程表来决定。递归地用一分为二的策略对选手进行分割,直到只剩下 2 个选手时,日
程表制定就很简单。这时只要让这 2 个选手进行比赛即可。
用分治策略,可以设计解棋盘覆盖问题的一个简捷算法。分治的技巧在于如何划分棋盘,使
划分后的子棋盘大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模
较小的棋盘覆盖问题。
当 k>0 时,将 2k×2k 的棋盘划分为 4 个 2k-1×2k-1 子棋盘。
原棋盘只有一个特殊方格,则其余 3 个子棋盘中没有特殊方格。
用一个 L 型骨牌覆盖这 3 个较小棋盘的会合处。从而将原问题转化为 4 个较小规模的棋盘覆
盖问题,以便采用递归方法求解。
递归地使用这种划分策略,直至将棋盘分割为 1×1 的子棋盘。
利用快速排序算法的思想,来解决选择问题。
记一趟快速排序后,分解出左子集中元素个数为 nleft,则选择问题可能是以下几种情况之一:
nleft =k﹣1,则分界数据就是选择问题的答案。
nleft >k﹣1,则选择问题的答案继续在左子集中找,
问题规模变小了。
nleft <k﹣1,则选择问题的答案继续在右子集中找,
问题变为选择第 k-nleft-1 小的数,问题的规模变小了。
�
�
�
�
�
�
�
�
�
�
)(%))((
)()%%(
)1(%
%
2/
1
是偶数
是奇数
pkk%aa
pkkaa
pka
ka
p
pp
评论0