4.4《算法图解》笔记——Chapter 9 dynamic programming

本文是《算法图解》第9章动态规划的笔记,介绍了背包问题的动态规划解决方案,包括旅游行程最优化,并探讨了最长公共子串和最长公共子序列的问题,通过实例解释了动态规划的思想和应用。
摘要由CSDN通过智能技术生成

算法图解笔记——Chapter 9 dynamic programming
Author: Seven Zou
Email: zoushiqi0404@gmail.com
Language: Python2.7


9 动态规划

动态规划主要思想在于将问题分成小问题,并先着手解决这些小问题。


9.1 背包问题

再次回到昨天学到的背包问题
解决方案一:
尝试各种可能的商品组合,并找出价值最高的组合。
在这里插入图片描述
但是在此方案下,运行速度将达到 O ( 2 n ) O(2^n) O(2n)。每增加一件商品,需要计算的集合都将指数形式增长。
解决方案二:
昨天了解近似求解的概念,针对这类问题就可以使用近似求解来寻找最优解,那么就可以使用动态规划算法,先解决子问题,再逐步解决大问题。类比此问题框架,那么就需要先解决小背包(子背包)问题,再逐步解决原来的问题。
在这里插入图片描述
假设每个动态规划算法都从一个网格开始,那么背包问题的网格为如下。
在这里插入图片描述
网格的各行为可选择的商品,各列为不同容量的背包。网格最初是空的,在填充满其中的每个单元格后,便能求出问题的答案。
-Row 1:吉他的重量刚好满足Column1 的1磅,那么可以将吉他的价格填入,相同操作,将吉他的价格填满第一行;在此行当前的最大价值为$1500
-Row 2:音响(4磅),对Column {1-3} 重量不满足所有继续填入$1500,在Column 4(4磅)中可以满足则填入 $3000;此时最大价值更新为$3000
-Row 3:笔记本电脑(3磅),与上述操作相同,可在Column3 填入 $2000。

商品 1 2 3 4
吉他 $1500 $1500 $1500 $1500
音响 $1500 $1500 $1500 $3000
笔记本电脑 $1500 $1500 $2000 ——

那么针对(3,4)元素如何取值呢?针对4磅选取 可以有"音响$3000" 或 "笔记本$2000 + 吉他$1500"选择,这样就体现出了计算小空间的优势,可以凸显最大价值。显然选择“笔记本+吉他”。

商品 1 2 3 4
吉他 $1500 $1500 $1500 $1500
音响 $1500 $1500 $1500 $3000
笔记本电脑 $1500 $1500 $2000 $2000+$1500=$3500

在计算每个单元格的价值时,使用的公式都相同。
c e l l [ i ] [ j ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值