热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《算法图解》第九章动态规划

第九章 动态规划

用表格法进行找最优方案

背包问题的最优方案

出去玩带东西的最优方案

对于字典查词的话,如果输入有误的话,比较俩个单词的相似性,可以用最长公共子串,不同的为零,相同的把左上方的值再加1导入当前的格子里,(为什么要引入最长公共子串呢及接着引出最长公共子序列呢),最长公共子序列,字母不同的话,就选择左边和上边格子里数值大的那个,相同的话,就是选完左边和上边格子里值大的然后再加1

动态规划不能解决的问题是彼此之间有依赖关系的,比如背包问题里,要偷走音箱也必须偷走CD机,这样的话会超重,

目录

9.1背包问题

9.2背包问题FAQ frequently asked question

9.3最长公共子串

9.4小结

9.1背包问题

偷东西的最终决策表格-----大事进行决策的时候也可以用表格法再加上权重
《算法图解》第九章 动态规划

9.2背包问题FAQ

1.
多增加一个物品---照样可以用上述方法继续
行的排练顺序变了有影响吗?---没有
如果增加一个更小的商品,只有0.5磅,那就将表格的刻度画的更细一些,0.5,1,1.5等
可以偷商品的一部分吗?---动态规划没法处理,但是贪婪算法可以处理
2.其他例子,旅行最优化,换了约束条件,从背包的包的承重约束条件转为时间约束(只有俩天假期),但是还是一样的做法,表格
《算法图解》第九章 动态规划
3.背包可能没装满----也就是说动态规划可能得到的不一定是最优解
4.动态规划可以解决把大问题分解为离散的子问题,而不能解决相互有依赖的子问题

9.3最长公共子串

引入个好玩的
想不出来怎么办,使用费曼算法
把问题写下来
好好思考
把答案写下来
1.最长公共子串
对于一个词典,如果输入一个和原先要输入的单词只有一点点差别,词典怎么进行判断
画表格,不同的为零,相同的把左上方的值再加1导入当前的格子里,结果如下图
《算法图解》第九章 动态规划
2.引入的问题背景是,如果有两个单词算出来的最长公共子串是一样的结果,那要怎么办呢?
《算法图解》第九章 动态规划
比较其最长公共子序列,具体的算法是字母不同的话,就选择左边和上边格子里数值大的那个,相同的话,就是选完左边和上边格子里值大的然后再加1,结果如下
《算法图解》第九章 动态规划

3.动态规划的实际应用
生物学家根据最长公共序列来确定DNA链的相似性,进而判断度两种动物或疾病有多相似。最长公共序列还被用来寻找多发性硬化症治疗方案。
你使用过诸如git diff等命令吗?它们指出两个文件的差异,也是使用动态规划实现的。
前面讨论了字符串的相似程度。 编辑距离levenshtein distance)指出了两个字符串的相似程度,也是使用动态规划计算得到的。编辑距离算法的用途很多,从拼写检查到判断用户上传的资料是否是盗版,都在其中。
你使用过诸如Microsoft Word等具有断字功能的应用程序吗?它们如何确定在什么地方断字以确保行长一致呢?使用动态规划!

9.4小结

需要在给定约束条件下优化某种指标时,动态规划很有用。
问题可分解为离散子问题时,可使用动态规划来解决。
每种动态规划解决方案都涉及网格。
单元格中的值通常就是你要优化的值。
每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。
没有放之四海皆准的计算动态规划解决方案的公式


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
author-avatar
宋羽翔-ben
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有