Python算法分析与设计实验:动态规划算法
一、实验目的
1、理解动态规划求解优化问题的典型步骤,以及动态规划算法求解计算问题的时间复杂度分析
2、熟练掌握利用动态规划算法求解一维、二维等典型优化问题,如斐波那锲数、拾捡硬币、连续子序列的最大值、矩阵的括号、0-1背包问题等。
3、对于简单问题能画出其动态规划表,并能从中得到问题的解。
二、实验工具
Win10操作系统、python3.7编译环境、IDLE编译器
三、实验内容
某种材料以长度计价,其价格表为:
长度:1 2 3 4 5 6 7 8 9 10
价格:15 8 9 10 17 17 20 24 30
现有一段长度为n的该种材料,试给出最佳切割分段方案,使其价值最大,用Python编程实现该算法。
四、实验调试过程
动态规划与分治法比较类似,都是通过求解子问题的解,最终来求出原问题的解。分治法只要是将原问题分解成为若干个独立的子问题,通过子问题来求解原问题的解。而动态规划恰恰相反,动态规划是用来求解子问题重叠的情况,即不同的子问题之间具有相同的公共子问题,在这种情况下分治法会花费大量的时间来计算已经计算过的那部分重叠子问题,效率大大降低,而动态规划权衡时间和空间的因素,将已经计算过的子问题存入一张表内,下次遇到相同的子问题时,直接查表就可以得到结果,大大加快了速度。
动态规划通常用来求解最优化问题,一般来说一个问题的最优解有多个,动态规划可以求解出其中的一个最优解,而不是最优解。
通过下面的四个步骤来设计一个动态规划问题:
1.刻画一个最优解的结构特征。
2.递归的定