算法快学笔记(十六):动态规划

本文介绍了动态规划的概念,并通过背包问题和最长公共子串问题进行深入讲解。动态规划解决了指数级复杂度的问题,通过解决子问题逐步得出最优解。在背包问题中,展示了如何构造表格并填充数据,以找到小偷能偷到的最高价值商品组合。对于最长公共子串,用类似的方法找出两个字符串共享的最长连续子串。动态规划在DNA分析、字符串相似度计算及断字功能等领域有广泛应用。
摘要由CSDN通过智能技术生成

1. 介绍

前文提到,对于背包问题与旅行商问题,计算的复杂度是随着计算数据的增加呈现指数级增长的,贪婪算法算可以处理,但得到的并不是最优解。

动态规划的主要思路是先解决子问题,在逐步解决大问题。本文将通过两个例子介绍动态规划的推算思路。

2. 背包问题

2.1 思路

通过动态规划方法解决背包问题的流程如下:

  1. 准备一个表格,商品作为Y轴,背包重量作为x轴

  2. 使用下面的公式算出价格且更新到表格里
    在这里插入图片描述

  3. 使用方法2,逐行填充表格,直到将表格填满。

2.2 推算过程

用于推算的数据如下:

  1. 小偷的背包可以放4KG的物品
  2. 可偷物品的价格,重量如下:
物品 重量 价值
吉他 1kg 1500
音响 4kg 3000
笔记本 3kg 2000
手机 1kg 2000

详细推算过程如下:

  1. 初始化表格如下
* 1 2 3 4
吉他
音响
笔记本
手机
  1. 吉他是第一个商品,且重量只有1kg,则对于不同大小的背包而言都可以放得下,所以第一行的值都为1500
*
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值