动态规划算法java代码_动态规划算法解决背包问题

动态规划算法java代码_动态规划算法解决背包问题JavaScript动态规划,斐波那契数,泰波那序契列

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

动态规划的基本概念

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。

动态规划适用条件

  • 最优化原理(最优子结构性质)
    一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质
  • 无后效性
    将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性
  • 子问题的重叠性
    动态规划算法的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其他的算法。选择动态规划算法是因为动态规划算法在空间上可以承受,而搜索算法在时间上却无法承受,所以我们舍空间而取时间

动态规划实例

斐波那契数

力扣509题:斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n – 1) + F(n – 2),其中 n > 1
给定 n ,请计算 F(n) 。

这个题目解法还是比较多的,主要说一下递归和动态规划

/** * @param {number} n * @return {number} */
var fib = function (n) { 
   
    // 动态规划
    if (n == 0 || n == 1) { 
   
        return n
    }
    let prev1 = 0;
    let prev2 = 0;
    let result=1
    for (let i = 2; i <= n; i++) { 
   
        prev2 = prev1
        prev1 = result
        result = prev1 + prev2
    }
    return result

    // 递归暴力解法
    if(n==0||n==1){ 
   
        return n
    }
    return fib(n-1)+fib(n-2)


};

在这里插入图片描述
第一次提交是动态规划的算法,第二提交是递归算法,就代码来说递归看起来是简单很多,但是执行用时,动态规划的算法是要快很多的。

泰波那契序列

力扣1137题:泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

/** * @param {number} n * @return {number} */
var tribonacci = function (n) { 
   
    if (n == 0) { 
   
        return 0
    }
    if (n <= 2) { 
   
        return 1
    }
    let prev1 = 1;
    let prev2 = 1;
    let prev3 = 0;
    for (let i = 3; i < n; i++) { 
   
        let num = prev1 + prev2 + prev3
        prev3 = prev2
        prev2 = prev1
        prev1 = num
    }
    return prev1 + prev2 + prev3
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186050.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月4日 下午1:36
下一篇 2022年10月4日 下午1:36


相关推荐

  • auto.js淘宝秒杀脚本_京东秒杀脚本

    auto.js淘宝秒杀脚本_京东秒杀脚本AUTO.JS脚本实现小米、淘宝、京东抢购代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入代码你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细

    2022年5月3日
    298
  • [python机器学习及实践(2)]Sklearn实现朴素贝叶斯

    [python机器学习及实践(2)]Sklearn实现朴素贝叶斯

    2022年4月3日
    46
  • [其他]OpenClaw保姆级部署[推广有奖]

    [其他]OpenClaw保姆级部署[推广有奖]

    2026年3月16日
    1
  • 状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎「建议收藏」

    状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎「建议收藏」业务中利用流程引擎可以解耦.但坏处是有一天流程引擎无法满足新功能的时候,开发工作量比较大.有遇到过一个特殊的case.乘客和司机,垫付场景.本来,乘客支付后分润给司机.两个行为时顺序的.后续变更,新增平台垫付.乘客支付和司机垫付两个行为即不是平行的,也不是互斥的,乘客支付排斥垫付,但是垫付不排斥乘客支付,且要对乘客支付进行延迟判断.业务逻辑

    2022年10月20日
    5
  • cas认证流程

    cas认证流程cas 逻辑流程图 CAS 是怎么操作的呢 或则是 KRB Kerberos 怎么操作的呢 他并不是很复杂 他先是建立一个专门认证用户的服务 SERVER 这个服务只做一件事 负责验证用户的 ID 和 PASS 是否是正确 在正确的情况提供用户一个名为 TGT 的票据 相当你要去游乐场玩 首先你要在门口检查你的身份 即 CHECK 你的 ID 和 PASS 如果你通过验证 游乐场的门卫 AS 即提供给你一张门卡 TGT 这张卡片的用处就是告诉游乐场的各个场所 你是通过正门进来 而不是后门偷爬进来的 并且也是获

    2026年3月19日
    1
  • Pycharm 中集成Jupyter

    Pycharm 中集成Jupyter注 本安装教程全程再 windows 下运行 其余环境不一定适用二 环境 配置文件 准备 1 生成配置文件 jupyternoteb config2 设置密码 jupyternoteb xxxxVerifypa xxxx NotebookPass Wrotehashedp home rdev jupyter jupyter notebook c

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号