算法结构与分析·分治法(概念)

分治法是一种将大型问题分解为相似子问题并递归求解的策略。适用条件包括问题规模能缩小到易解程度,子问题独立且可合并。解题步骤包括分解原问题、递归解决子问题及合并子问题的解。文中还讨论了分治法的改进措施,旨在减少子问题数量和递归内部的计算量。
摘要由CSDN通过智能技术生成

基本思想

分治法即分而治之,将规模为n的问题分解成k个规模较小的相似的子问题,这些子问题互相独立且与原问题的形式相同,递归地解出这些子问题,然后通过合并子问题的解来得到原问题的解。

简单的说就是将一个大的问题拆分成和它相似的小的问题,通过递归很容易求解出这些小问题,通过小问题的解合并求出大问题的解。


适用条件

  1. 问题规模缩小到一定程度就可以很容易的解决
  2. 该问题可以分解为若干个规模较小的相似的子问题
  3. 可以利用子问题的解合并出该问题的解
  4. 所分解出的小问题相互独立,不包含公共子问题

分治法的解题思路

分治法解题步骤如下:

  • 分解原问题: 将原问题分解成若干个规模较小的、相互独立的、与原问题形式相同的子问题
  • 解决子问题: 若子问题规模较小,容易被解决,则直接求解,否则递归地求解各个子问题
  • 合并问题的解: 将各个子问题的解合并为原问题的解

分治法一般算法的设计模式

divide-and-conquer(P)
> {
> 	if |P|<=n0 return adhoc(P);	//在P<=n0时,可以直接解决P
> 	divide P into P1,P2,...	,Pk;	//将原问题分解
> 	for(i=1;i<=k;i++)
> 		yi=divide-and-conquer(Pi);	//递归处理子问题
> 	return merge(y1,y2,...,yk);	//合并子问题解
> }

分治法的改进措施

  • 减少子问题的个数
  • 预处理减少递归内部的计算量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值