算法笔记(问题分解,分治与动态规划)

本文探讨了问题分解作为求解问题的基本思维方式,重点关注分治策略和动态规划。通过观察和分析,可以找出问题的递归表达式,并利用递归运算程序实现解法。分治策略适用于子问题只出现一次的情况,动态规划则通过保存子问题结果提高效率,尤其在子问题重叠时。尽管动态规划的递归表达式获取更具挑战性,但小规模解的观察仍然至关重要。
摘要由CSDN通过智能技术生成

问题分解就是通过对问题进行分解,从而将问题分解成有限个问题规模更小的子问题,从而达到问题求解的过程或者方法。问题分解是一种从问题规模出发来进行问题求解的方法,一般来讲,问题的规模与问题的复杂性密切相关,通过降低问题的规模可以达到减低问题复杂性,从而易于问题的求解。分治策略和动态规划都是这种思想。其实问题分解是问题求解思维中的一种基本的思维方式。当然问题能通过分解来获得答案,最关键的地方就是原问题的答案与分解后的子问题之间存在着关联关系,也就是原问题的解可以通过对分解后的子问题的解经过简单运算或选择就可得到(分治策略中是合并),这是问题能否通过分解进行求解的关键所在。,当然,如果原问题能够从子问题集中到处解,一个基本的要求是子问题之间必须是相互独立的。一般来讲,如果问题可以通过分解成子问题来求解,我们总希望能寻找到一种递归表达式,从而便于计算,特别是计算机的处理。怎么寻找这种表达式呢?
1)首先是观察,获取分解的原子规模的解,一般是观察规模为1..m的情况(m一般很小,很容易就能得出解),比如最快装配线问题中的只有1个装配站,2个装配站的情况,从而获得对于解的感性认识,可以帮助对递归表达式的猜测;
2)其次是分析规模n的解与子问题(规模k,k<n)解之间的关系,比较多的是倍数关系(n=αk,α>1)和线性关系T(n)=a1*T(n-b1)+a2*T(n-b2)+...;多项式关系(比如矩阵乘法计算顺序最优化求解问题);
3)通过对猜测或者推理获得递归表达式。

上述分析得到的递归表达式很容易得到递归运算程序,无论是动态规划还是分治策略都可以。
通过对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值