对动态规划的一些看法

动态规划满足的 基本条件是:

1. 最优子结构

当一个问题的最优解包含了子问题的最优解时,说明这个问题具有最优子结构的特性。

那么如何判断一个问题是否具有这个属性呢?

我们可以通过数学上常用的反证法来证明,假设子问题的解不是最优的,那么该问题的解还是最优的吗?如果不是,那么说明这个问题满足最优子结构的特性,但是,满足了最优子结构特性,也不能说明该问题可以用动态规划来解决问题。我们知道,贪心发也满足最有子结构。

贪心算法和动态规划的区别:

动态规划是自底向上,会保存每个子问题的最优解,在没有搜索完整个空间时是不知道哪个子问题的最优解才会构成整个问题的最优解,贪心算法是局部最优的形式作出选择,他不会保留子问题的解,这样一来贪心算法要明显快于动态规划。

2.子问题相互独立

一个子问题的解不会影响同一个问题的另一个子问题的解,就是指这两个子问题中不会有共同的数据集。

将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性


3.重叠子问题

不同的子问题i会有很多重叠的子问题,因此在求解过程用空间来换取时间

动态规划算法的四个设计步骤:

1.描述最优解的结构

2.递归定义最优解的值

3.按自底向上的方式构造最优解

备忘录方法:

采用自顶向下的策略,具有动态规划的效率,想动态规划一样记录子问题的解,同时利用递归算法,是程序逻辑变得简单。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个Java项目管理和构建工具,我认为Maven是非常有用的。它可以自动化项目的构建过程,包括依赖管理、编译、测试和打包等,使得项目的构建变得更加高效和可靠。 以下是我对Maven的一些看法: 1. 简化依赖管理:Maven提供了一种简单的方式来管理项目的依赖关系。通过使用Maven的POM文件,可以轻松地定义项目所依赖的外部库,并自动下载和安装这些库。 2. 一致的构建过程:使用Maven可以确保项目在不同的环境中得到一致的构建。这是因为Maven采用了一致的项目结构和构建流程,可以保证在不同的开发环境中的构建结果是一致的。 3. 插件系统:Maven的插件系统可以扩展构建过程,让开发者可以在构建过程中自定义行为。例如,可以使用插件来生成API文档、运行代码检查工具等。 4. 社区支持:Maven拥有一个庞大的社区,可以帮助开发者解决遇到的问题。这个社区也贡献了很多有用的插件和工具,可以方便地与Maven集成。 5. 需要学习成本:Maven虽然提供了很多好处,但也需要一些学习成本。对于新手来说,可能需要一些时间来了解Maven的基本概念和使用方法。 综上所述,我认为Maven是一个非常有用的工具,可以帮助开发者简化项目管理和构建过程。尽管需要一定的学习成本,但一旦熟悉了Maven,它可以大大提高开发效率和项目的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值