当前位置:首页 > JavaScript

js实现动态规划

2026-02-02 22:32:44JavaScript

动态规划的基本概念

动态规划是一种将复杂问题分解为更小子问题的方法,通过存储子问题的解来避免重复计算。适用于具有重叠子问题和最优子结构性质的问题。

斐波那契数列示例

斐波那契数列是动态规划的经典案例。递归实现效率低,而动态规划可以显著提升性能。

js实现动态规划

function fibonacci(n) {
  let dp = [0, 1];
  for (let i = 2; i <= n; i++) {
    dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n];
}

背包问题解决方案

背包问题要求在不超出背包容量的情况下选择物品以获得最大价值。

js实现动态规划

function knapsack(weights, values, capacity) {
  const n = weights.length;
  const dp = Array.from({ length: n + 1 }, () => Array(capacity + 1).fill(0));

  for (let i = 1; i <= n; i++) {
    for (let j = 0; j <= capacity; j++) {
      if (weights[i - 1] <= j) {
        dp[i][j] = Math.max(dp[i - 1][j], values[i - 1] + dp[i - 1][j - weights[i - 1]]);
      } else {
        dp[i][j] = dp[i - 1][j];
      }
    }
  }
  return dp[n][capacity];
}

最长公共子序列

查找两个序列共有的最长子序列长度。

function longestCommonSubsequence(text1, text2) {
  const m = text1.length, n = text2.length;
  const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));

  for (let i = 1; i <= m; i++) {
    for (let j = 1; j <= n; j++) {
      if (text1[i - 1] === text2[j - 1]) {
        dp[i][j] = dp[i - 1][j - 1] + 1;
      } else {
        dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
      }
    }
  }
  return dp[m][n];
}

优化空间复杂度

某些情况下可以优化空间使用,例如斐波那契数列只需保存前两个状态。

function fibonacciOptimized(n) {
  if (n <= 1) return n;
  let prev = 0, curr = 1;
  for (let i = 2; i <= n; i++) {
    [prev, curr] = [curr, prev + curr];
  }
  return curr;
}

应用场景

动态规划适用于多种场景,包括最短路径问题、字符串编辑距离、股票买卖问题等。关键在于识别子问题并建立状态转移方程。

标签: 动态js
分享给朋友:

相关文章

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配…

vue动态组件实现

vue动态组件实现

Vue 动态组件实现方法 使用 component 标签与 is 属性 通过 Vue 内置的 <component> 标签和 is 属性实现动态组件切换。is 的值可以是已注册的组件名或导…

vue动态实现select

vue动态实现select

vue动态实现select的方法 使用v-for动态渲染选项 通过v-for指令可以动态生成select的option选项。将选项数据存储在data中,利用v-for遍历数据生成下拉列表。 <…

vue实现动态隐藏

vue实现动态隐藏

动态隐藏的实现方法 在Vue中实现动态隐藏可以通过多种方式,常见的有条件渲染、动态绑定样式或类名。以下是几种具体实现方法: 使用v-if或v-show指令 <template> &…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…