五大基本算法——分治法

一、基本思想

将一个大规模的问题均等分为多个独立相同的规模更小的子问题,进行分别求解,分而治之,然后合并成大问题的解得到最终结果。

经研究证明,在使用分治法设计算法时,最好让小问题的规模大致相同,这种思想为“平衡子问题”思想,研究表明这样做对算法的效果有很大的帮助。

二、基本步骤

1、分解:将一个难以解决的大问题分割成一系列规模较小的子问题,这些子问题相互独立,且与原问题相同。

2、求解:递归求解子问题,当问题足够小时则直接求解。(规模缩小到一个或者两个时)

3、合并:将子问题的解合并为原问题的解。

三、分治法的适用条件

在以下四种情况都满足的情况下,最好考虑分治算法:

1、该问题可以分解为若干个规模较小的子问题。(才能用步骤一,分解)

2、该问题所分解出的子问题是相互独立的。(才能用步骤一,分解)

3、该问题规模缩小到一定的规模时可以直接求解。(才能用步骤二,求解)

4、利用子问题的解可以合并为原问题的解(才能用步骤三,合并)

四、分治法与快速排序

分治法可以运用于快速排序中,作为一种改进策略。(选取划分元)

利用分治法可选取非常合理、平衡的划分元

1:将元素个数n除以5进行分组,分得n/5组
2:5组分别排序,取中位数
3:将5组的中位数组成集合,再排序取中位数,将其作为划分元

思路:利用快排,但只对划分出的两个子数组之一进行递归处理,利用上述方法选取中位数的中位数作划分元进行排序。最后选出某一子数组中满足要求的元素。

你可能感兴趣的:(五大基本算法——分治法)