Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是动态规划还是分而治之? 我正在学习算法。我读过一篇文章,间接地讨论了背包问题。最后,据说它是用动态规划来解决的,但对我来说,它看起来就像是用小优化来分而治之。有人能看一下吗? 我已将代码粘贴到一个垃圾箱中_Javascript_Algorithm - Fatal编程技术网

Javascript 这是动态规划还是分而治之? 我正在学习算法。我读过一篇文章,间接地讨论了背包问题。最后,据说它是用动态规划来解决的,但对我来说,它看起来就像是用小优化来分而治之。有人能看一下吗? 我已将代码粘贴到一个垃圾箱中

Javascript 这是动态规划还是分而治之? 我正在学习算法。我读过一篇文章,间接地讨论了背包问题。最后,据说它是用动态规划来解决的,但对我来说,它看起来就像是用小优化来分而治之。有人能看一下吗? 我已将代码粘贴到一个垃圾箱中,javascript,algorithm,Javascript,Algorithm,动态规划需要一些记忆或表格格式正确吗?我非常喜欢斯基纳在《算法设计手册》一书中描述动态规划的方式。“动态规划是一种通过存储部分结果来有效实现递归算法的技术” 这里有一个递归算法,但不存储部分结果。所以它不是动态规划。但是,通过存储和重用部分结果,它可能会变成一个动态规划算法。我认为这既不是动态规划,也不是分而治之。这只是一个递归算法,用于生成和查找作业子集,它比最大xp占用的时间更少。感谢您的响应。想了想,我也明白了为什么不是分而治之。另外,根据xp计算,这是一个O(n*2^n)时间算法,对吗?

动态规划需要一些记忆或表格格式正确吗?

我非常喜欢斯基纳在《算法设计手册》一书中描述动态规划的方式。“动态规划是一种通过存储部分结果来有效实现递归算法的技术”


这里有一个递归算法,但不存储部分结果。所以它不是动态规划。但是,通过存储和重用部分结果,它可能会变成一个动态规划算法。

我认为这既不是动态规划,也不是分而治之。这只是一个递归算法,用于生成和查找作业子集,它比最大xp占用的时间更少。感谢您的响应。想了想,我也明白了为什么不是分而治之。另外,根据xp计算,这是一个O(n*2^n)时间算法,对吗?而不是O(n*nT)算法,不是时间。问题应该用动态规划来解决,但你提供的代码并不能做到这一点。您粘贴的代码只是测试所有的可能性,以找到最好的一个。这种方法被称为“暴力”或“穷举搜索”。
const ACTIVITIES = [
  {name: 'side-project', time: 10, xp: 12},
  {name: 'algorithms', time: 3, xp: 7},
  {name: 'networking', time: 1, xp: 0.5},
  {name: 'exercise', time: 2, xp: 1.5},
  {name: 'systems design', time: 4, xp: 4},
  {name: 'making CSS codepens', time: 3, xp: 4}
];


const findJob = function(time, activities) {

    const optimalSolution = function(items, n = items.length, timeLeft = time) {

    if (n === 0 || timeLeft === 0) {
      return [];
    }

    if (items[n - 1].time > timeLeft) {
      return optimalSolution(items, n - 1, timeLeft);
    }

     const lastItem = items[n - 1];

    const withLastItem = [
      lastItem,
      ...optimalSolution(items, n - 1, timeLeft - lastItem.time)
    ];
    const withoutLastItem = optimalSolution(items, n - 1, timeLeft);

    if (totalXp(withLastItem) > totalXp(withoutLastItem)) {
      return withLastItem;
    } else {
      return withoutLastItem;
    }
    };

    const totalXp = arr => arr.reduce((total, ea) => total + ea.xp, 0);

    const sortedByTime = activities
      .slice()
      .sort((a, b) => a.time - b.time);

    return optimalSolution(sortedByTime)
      .map(act => act.name);
    };