动态规划之背包问题的Python实现

目录

1.问题描述

2.动态规划之网格法

3.python实现


1.问题描述

题目来源于《算法图解》第9章练习题9.2,如下图所示。

动态规划之背包问题的Python实现_第1张图片

对于背包问题,通常的做法有列举法、贪婪算法和动态规划

(1)列举法:列举出所有的可能情况,再选择最优解,但当情况很多时,这种算法复杂度很高

(2)贪婪算法:在容量允许范围内,每次都拿剩余物品中价值最高的 ,贪婪算法能够快速解决复杂度很高的问题,但通常得到的是次优解,但就对这个题目而言,恰好可以得到最优解的

(3)动态规划:对于解决背包问题,最好的算法是动态规划,可以得到最优解。动态规划和贪婪算法相似,都是将问题分解为若干小问题,自底向上解决问题,但贪婪算法目标是取得局部最优,而动态规划要取得全局最优。

2.动态规划之网格法

《算法图解》一书中对于求解动态规划问题,使用了网格法。

对于背包问题,如下表格,网格的列表示背包容量的划分,具体的划分粒度取决于物品的最小重量,本题中,物品最小重量为1,所以划分的最小单位就是1。中间每个网格对应的是一个子问题,网格里填的数字就是我们要优化的值。换句话说,以(水,1)这个单元格为例,所对应的问题就是将水放到容量为1磅的背包中,能够获得的最大价值是多少?

  1 2 3 4 5 6
           
         

你可能感兴趣的:(Python,数据结构,python,数据结构,动态规划求解)