双核处理器并行处理任务的最短时间算法?

新手上路,请多包涵
双核处理器可以并行处理任务,它们的处理速度都为1k/s,每个任务以k为单位,如[300, 600, 300, 500, 1000, 700, 300],求一堆任务的最短时间算法?

下面是我自己用JavaScript写的一个算法,还是有点问题,问下有好的方法吗?

    let arr = [300, 600, 300, 500, 1000, 700, 300];
    let left = [];
    let right = [];
    let lefts = 0;
    let rights = 0;
    let flag = true; // 第一次累加最大值 第二次累加最小值 平分两组任务
    function task(arr) {
        // 平分两组任务
        let newArr = arr.sort((a, b) => b - a);
        if (flag) {
            left.push(newArr[0]);
            right.push(newArr[1]);
            newArr = newArr.slice(2);
        } else {
            left.push(newArr[newArr.length - 1]);
            right.push(newArr[newArr.length - 2]);
            newArr = newArr.slice(0, newArr.length - 2);
        }
        // 开关循环 第一次加最大值 第二次加最小值 依次累加
        flag = !flag; 
        // 两组任务分别之和
        lefts = left.reduce((a, b) => a + b);
        rights = right.reduce((a, b) => a + b);
        // 只剩下一个任务或0个任务时,最终结果计算
        if (newArr.length <= 1) {
            if (newArr.length == 1) {
                if ((lefts - rights) > newArr[0]) {
                    return lefts;
                } else {
                    right.push(newArr[0]);
                    rights = right.reduce((a, b) => a + b);
                    return rights;
                }
            } else {
                if (lefts < rights) {
                    return rights;
                } else {
                    return lefts;
                }
            }
        }
        // 递归调用实现循环
        return task(newArr);
    };
    console.log("最短输出时间为:" + task(arr) + 's');
阅读 2.1k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题