美文网首页
动态规划算法

动态规划算法

作者: 沉默紀哖呮肯伱酔 | 来源:发表于2020-07-16 17:31 被阅读0次

动态规划算法将整个问题分成多个小问题,将所有小问题解决掉,之后合并成一个整体的解决方案。
下面我们举一个例子看一下动态规划算法的实现。

斐波那契数列问题

斐波那契数列 0,1,1,2,3,5,8,13,21...,斐波那契数列是有前两项的值相加而成。

const fib = (n) => {
  const arr = [];
  for(let i = 0;i<n;i++){
     arr[i] = 0
  }

 if(n === 1 || n === 2){
    return 1
  }else{
    arr[1] = 1
    arr[2] = 1
    for(let j = 3; j < n; j++){
      arr[j] = arr[j -1] + arr[j -2]
    }
    return arr[n-1]
  }
}

我们在数组中保存每一步的计算结果,这是与递归不同之处。那么我们看一下递归算法的实现和两者的耗时对比。
递归算法实现斐波那契数列如下

 const fib1 = (n) =>{
     if(n < 2){
       return n
     }else{
         return fib1(n-1) + fib1(n-2)
     }
 }

 const startTime = new Date().getTime()
 fib(1000)
 const stopTime = new Date().getTime()
 console.log(stopTime - startTime) // 0

 const startTime1 = new Date().getTime()
 fib1(1000)
 const stopTime1 = new Date().getTime()
 console.log(stopTime1 - startTime1) // 2

结果看出动态规划算法的耗时较短。

我们也可以在不使用数组的情况下,使用动态规划来保存每一步的执行结果。

 const fib = (n) = >{
  let result = 0
  let prev = 1
  let next =1
  for(let i =2 ;i<n;i++){
    result  = prev + next;
    prev = next;
    next = result
  }
  return result
}

相关文章

  • 动态规划算法

    动态规划算法 最长上升子序列

  • 维特比算法

    维特比(Viterbi)算法是一种动态规划算法,在处理隐马尔可夫(HMM)最优路径问题时经常被使用. 动态规划算法...

  • 最短路径解决方法

    Floyd算法;Dijkstra算法;Bellman-Ford算法;动态规划算法

  • 背包问题

    介绍 学习动态规划算法的经典例题。动态规划算法一般有3个特征1、最优化原理:最优解所包含的子问题的解也是最优的。2...

  • 动态规划算法(01背包问题)

    一. 动态规划算法介绍: 动态规划算法和分治算法类似,也是将待求解问题分成若干个小问题一步步求解,不同的是,每一个...

  • 基础算法

    二分查找 冒泡排序(优化) 归并排序 动态规划算法

  • 动态规划入门

    1.什么是动态规划动态规划是在前面已有答案的基础上向下递推的过程 动态规划算法的两种形式上面已经知道动态规划算法的...

  • 【JS算法】动态规划 - 斐波那契数列

    动态规划算法 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。其基本思想也...

  • 2019-11-04 回溯算法

    package others; import java.util.Arrays; /** 动态规划算法计算10个工...

  • 动态规划

    动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...

网友评论

      本文标题:动态规划算法

      本文链接:https://www.haomeiwen.com/subject/qbqmhktx.html