zoukankan      html  css  js  c++  java
  • 多机调度问题

    2018-03-18 20:01:48

    问题描述:

    有n个独立的作业需要在m台相同的机器上进行加工处理,作业i需要的加工时间为ti. 每个作业可以任选一台机器加工, 但加工结束前不能中断,作业不允许拆分。

    要求给一种作业调度方案,使所给的n个作业在尽可能短的时间内完成。

    问题求解:

    这个问题是一个NPC问题,到目前为止还没有有效的解法,对于这一类的问题,使用贪心策略有时候可以设计出较好的近似算法。

    我们可以采用最长处理时间优先的贪心选择策略进行设计,这个策略的有效性可以类比装瓦罐问题,先把大的放进去,最后再塞小的。

    具体实现如下:

    1)若 n <= m,则结果非常明显,最后的结果就是那个最长处理时间。

    2)若 n > m,则我们需要对n个作业进行排序,按从大到小的顺序分配给最空闲的机器。

    public class Greedy {
        int greedy(int[] jobs, int m) {
            int n = jobs.length;
            Arrays.sort(jobs);
            if (n <= m) return jobs[n - 1];
            int[] machines = new int[m];
            for (int i = n - 1; i >= 0; i--) {
                int index = getIdle(machines);
                machines[index] += jobs[i];
            }
    
            int res = 0;
            for (int i = 0; i < machines.length; i++) {
                if (machines[i] > res) res = machines[i];
            }
            return res;
        }
    
        int getIdle(int[] m) {
            int index = 0;
            int min = m[0];
            for (int i = 1; i < m.length; i++) {
                if (m[i] < min) {
                    min = m[i];
                    index = i;
                }
            }
            return index;
        }
    
        public static void main(String[] args) {
            Greedy g = new Greedy();
            System.out.println(g.greedy(new int[]{2,14,4,16,6,5,3}, 3));
        }
    }
    
  • 相关阅读:
    外部中断实验
    冒泡算法代码
    第5章 嵌入式系统开发与维护知识 5.1
    C语言学习视频,栈,队列,链式栈,链式队列
    USART的配置
    树的一些基本概念
    mysql外键
    数据结构之【队列】
    数据结构之【栈】
    数据结构之【数组】
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/8597302.html
Copyright © 2011-2022 走看看