算法设计与分析: 5-17 最佳调度问题

5-17 最佳调度问题


问题描述

假设有 n 个任务由 k 个可并行工作的机器完成。完成任务 i 需要的时间为 t i 。试设计一个算法找出完成这 n 个任务的最佳调度,使得完成全部任务的时间最早。

对任意给定的整数 n 和 k,以及完成任务 i 需要的时间为 t i ,i=1~n。编程计算完成这 n个任务的最佳调度。

数据输入:
第一行有 2 个正整数 n 和 k。第 2 行的 n 个正整数是完 成 n 个任务需要的时间。


Java

package Chapter5HuiSuFa;

import java.util.Scanner;

public class ZuiJiaDiaoDu {

    private static int MAX = 100000;
    private static int n,k;
    private static int[] t,len;
    private static int best;

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        while (true){
            best = MAX;

            n = input.nextInt();
            k = input.nextInt();

            t = new int[n];
            len = new int[k];

            for(int i=0; i<n; i++)
                t[i] = input.nextInt();

            search(0);

            System.out.println(best);
        }
    }

    private static void search(int dep){
        if(dep == n){
            int tmp = comp();
            if(tmp < best)
                best = tmp;
            return;
        }
        for(int i=0; i<k; i++){
            len[i] += t[dep];
            if(len[i] < best) search(dep+1);
            len[i] -= t[dep];
        }
    }

    private static int comp(){
        int tmp = 0;
        for(int i=0; i<k; i++)
            if(len[i] > tmp)
                tmp = len[i];

        return tmp;
    }
}

Input & Output

7 3
2 14 4 16 6 5 3
17

Reference

王晓东《计算机算法设计与分析》(第3版)P185

猜你喜欢

转载自blog.csdn.net/ioio_/article/details/81127483
今日推荐