算法什么是动态规划算法之剪绳子问题什么是动态规划算法表代码和具体的填表过程求解答

两种不同的方法解决这个问题先用常规的需要O(n?)时间和O(n)空间的什么是动态规划算法,接着用只需要O(1)的时间和空间的贪心算法

(1)是求最优解问题,如最大值最小值;
(2)该问题能够分解成若干个子问题,并且子问题之间有重叠的更小子问题

2.1通常按照如下4个步骤来设计一个什么是动态规划算法算法:

(1)刻画一个最优解的结构特征;
(2)递归地定义最优解的值;
(3)计算最优解的值,通常采用自底向上的方法;
(4)利用计算出的信息构造一个最优解

2.2用什么是动态规划算法分析问题

首先定义函数f(n)为把长度为n的绳子剪成若干段后各段长度乘积的最大值。在剪第一刀的時候我们有n-1中可能的选择,也就是剪出来的第一段绳子可能长度为12,…n-1。因此f(n) = max(f(i) * f(n-i))其中0<i<n。

//绳子在3米以内直接返回对应的值,不能用什么是动态规划算法的公式做 //创建数组存储子问题最优解 //对于绳子长度为12,3米的,绳子的最大乘积就是长度本身 //从4米开始计算,直到计算到總长 //对于长度为i的绳子计算所有可能的切分,找到最大值

在每一步求解的步骤中他要求每一步都是最优选择操作,并且通过一系列的朂优选择能够产生一个问题的(全局的)最优解

3.1 贪心算法满足的条件

1、可行的:即它必须满足问题的约束
2、局部最优:他是当前步骤中所有可行选择中最佳的局部选择
3、不可取消:即选择一旦选出,在算法的后面步骤就不可更改了

3.2 用贪心算法分析问题

如果我们按照如下的筞略来剪绳子则得到的各段绳子的长度的乘积将最大:当n≥5时,我们尽可能多的剪长度为3的绳子:当剩下的绳子长度为4时把绳子剪成两段長度为2的绳子。

//尽可能的减去长度为3的绳子段 //当绳子最后剩下的长度为4的时候不能再减去长度为3的绳子段 //此时更好的方法是把绳子剪成長度为2的两段,因为2*2>3*1 //最后小于等于4米的尽量多的产生2米的分割 //3的多少个三次幂乘以2的多少个2次幂

发布了93 篇原创文章 · 获赞 77 · 访问量 2万+

使用什么是动态规划算法题的特征:

1、面试题通常是求一个问题的最优解(通常是求最大值或者最小值)

2、该问题可以分解成若干个子问题并且子问题之间还有重叠的哽小的子问题。

1、分析能否将大问题分解成小问题且分解后的小问题也存在最优解

2、如果把小问题的最优解组合起来能够得到整个问题嘚最优解,则可以使用什么是动态规划算法

例如当绳子长度是8时,我们把它剪成长度分别为2,3,3的三段此时得到的最大乘积是18。

当n很大时只有当f[i]取最优解,并且f[n-i]也取最优解时f[n]才是最优的。

// 注意这里求f(1)*f(2)时f(1)不能取0,因为此处它是作为长度为3时的内部最优解,此时f(1)=1

同样的f(2)不能取1此时它作为长度为3时的内部最优解应该取2,因此f(2)=2.

从上面分析可知,当绳子长度为3时f(3)=2, 而当f(3)作为内部最优解出现时,f(3)=3>2

而当绳子长度为4時f(4)=4,而f(4)作为内部最优解出现时,f(4)=4=4

也就是说从n=4开始内部最优解取的是当绳子为n的时候的最优解而不是n了。

因此什么是动态规划算法要从n=4开始而内部最优解的初始化要初始化到3才行。

我要回帖

更多关于 什么是动态规划算法 的文章

 

随机推荐