使用递归的加权作业调度

时间:2018-09-28 19:43:39

标签: javascript algorithm recursion job-scheduling recursive-backtracking

我正在尝试用强力解决weighted job scheduling问题。

这是我尝试过的。

const solution = jobs => {
  let maxWeight = 0;

  for (let i = 0; i < jobs.length; i++) {
    const endTime = jobs[i][1];
    const weight = jobs[i][2];

    const filteredJobs = jobs.filter(
      (job, index) => job[0] >= endTime);

    const returnedWeight = solution(filteredJobs);
    if (returnedWeight > maxWeight) {
      maxWeight = returnedWeight;
    }
    return weight + maxWeight;
  }
  return maxWeight;
};

我用来测试我的解决方案的输入是[[1、2、50],[3、5、20],[6、19、100],[2、100、200]。当我执行程序时,它将返回我170,即执行顺序为1-> 2-> 3。但是,按1-> 4的顺序执行时,预期输出为250。

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:3)

您的循环for (let i = 0; i < jobs.length; i++) {仅在i = 0时运行,就像您以后进行的return weight + maxWeight;一样。不知道为什么要这么做,我想你打算这么做

  if (returnedWeight + weight > maxWeight) {
    maxWeight = returnedWeight + weight;
  }