算法----五大算法之分治法
2017-05-27 17:48
134 查看
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
1. 基本概念
字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如快速排序,归并排序等。
2. 适用范围
分治法所能解决的问题一般具有以下几个特征:
1) 该问题的规模缩小到一定的程度就可以容易地解决
2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
3) 利用该问题分解出的子问题的解可以合并为该问题的解;
4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
3. 分治法的步骤
分治法在每一层递归上都有三个步骤:
step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
step3 合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:
Divide-and-Conquer(P)
[cpp] view
plain copy
if |P|≤n0
then return(ADHOC(P))
将P分解为较小的子问题 P1 ,P2 ,...,Pk
for i←1 to k
do yi ←Divide-and-Conquer(Pi) △ 递归解决Pi
T ←MERGE(y1,y2,...,yk) △ 合并子问题
return(T)
其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,y2,...,yk合并为P的解。
4. 复杂度分析
参见http://blog.sina.com.cn/s/blog_48258fbe0100gcy8.html
5. 典型问题
(1)二分搜索
(2)大整数乘法
(3)Strassen矩阵乘法
(4)棋盘覆盖
(5)合并排序
(6)快速排序
(7)线性时间选择
(8)最接近点对问题
(9)循环赛日程表
(10)HANOI塔
参考:http://c.chinaitlab.com/special/algorithm/Index.html
1. 基本概念
字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如快速排序,归并排序等。
2. 适用范围
分治法所能解决的问题一般具有以下几个特征:
1) 该问题的规模缩小到一定的程度就可以容易地解决
2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
3) 利用该问题分解出的子问题的解可以合并为该问题的解;
4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
3. 分治法的步骤
分治法在每一层递归上都有三个步骤:
step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
step3 合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:
Divide-and-Conquer(P)
[cpp] view
plain copy
if |P|≤n0
then return(ADHOC(P))
将P分解为较小的子问题 P1 ,P2 ,...,Pk
for i←1 to k
do yi ←Divide-and-Conquer(Pi) △ 递归解决Pi
T ←MERGE(y1,y2,...,yk) △ 合并子问题
return(T)
其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,y2,...,yk合并为P的解。
4. 复杂度分析
参见http://blog.sina.com.cn/s/blog_48258fbe0100gcy8.html
5. 典型问题
(1)二分搜索
(2)大整数乘法
(3)Strassen矩阵乘法
(4)棋盘覆盖
(5)合并排序
(6)快速排序
(7)线性时间选择
(8)最接近点对问题
(9)循环赛日程表
(10)HANOI塔
参考:http://c.chinaitlab.com/special/algorithm/Index.html
相关文章推荐
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法之分治法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法:分治法、动态规划、贪心法、回溯法、分支界限法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法 之 分治法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 新手讲算法:五大常用算法--分治法,动态规划,回朔法,分支界限法,贪心算法 之 分治法
- 五大常用算法之分治法
- 五大常用算法之一:分治法
- 五大算法之一--分治法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法 2015-06-08 16:00 50人阅读 评论(0) 收藏
- 五大算法之一--分治法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法概述
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法