动态规划问题(最大子段和问题),分治法问题(二路归并算法),贪心算法问题(实现钱币问题),回溯法问题(n皇后问题)

就这!!就这!!就这!!哈哈哈哈。

(一)就自己对与这几个算法的一些总结。

1.动态规划法: 基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解,以自底向上的方式解各子问题。
2.分治法问题: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

注: 你会发现,其实这两个没啥区别,都是大问题分解成小问题,然后找最优解的问题。不同的是分治法分解后的子问题是相互独立的,不相同。而动态规划法分解后的子问题有相同的,保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。

3.贪心算法问题: 采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的。

4.回溯法问题: 一般都是问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。

(二)各个方法的详解

1.动态规划法:
     (1)在解决动态规划问题时一般分为四步:
               1、定义一个状态,这是一个最优解的结构特征
               2、进行状态递推,得到递推公式
               3、进行初始化
               4、返回结果

     (2)适用性
               1、最优子结构性质
               2、无后效性
               3、子问题的重叠性
2.分治法:
     (1)在每一层的递归上的步骤
               1、分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题。
               2、解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题。
               3、合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:

Divide-and-Conquer
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值