数据结构-五大基本算法-分治法

分治法:分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后的子问题可以简单的直接求解,原问题的解即 子问题的解的合并。

分治法使用递归分解,每一个递归都有三个步骤:

1.分解: 将原问题分解为若干个小的、相互独立的、与原问题相同的子问题

2. 求解: 若子问题规模较小 而容易被解决则直接解,否则递归地解 各个子问题

3. 合并: 将各个子问题的解 合并为原问题的解

如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可以用分治法,但一般用动态规划更好。

数据结构-五大基本算法-分治法_第1张图片

 

例如:归并排序

设归并排序的当前区间是 R[low...high],分治法的三个步骤是:

1.分解: 将当前区间一分为二,即求分裂点

2. 求解: 递归地对子区间 L[low...mid] 和 R[mid +1...high] 进行归并排序

3. 组合: 将已排序的两个子区间 l[low...mid] 和 R[mid + 1 ... high] 归并为一个有序的 区间R[low...high]

你可能感兴趣的:(数据结构,分治算法,算法)