zoukankan      html  css  js  c++  java
  • 带有限期和效益的单位时间的作业排序贪心算法

    D=(2,3,1,3,4,5,2);P(15,12,11,10,8,5,4);

    首先将作业按p1≥p2 ≥ … ≥ pn排序, 将作业1存入解数组J中, 然后按照如下步骤逐一处理作业2到作业n;假设已处理完了i-1个作业, 其中有k个作业可构成可行解,已存入J(1),J(2)…J(k)中, 且D(J(1))<=D(J(2)) <=…<=D(J(k))
    §现在处理作业i, 判断Jυ{i}是否可行, 就是看是否能为其中作业都找到适当插入位置r, 使作业i插入后有D(J(r))≥r; 1≤r≤k+1.  过程如下:

    将D(J(k)), D(J(k-1)),…依次与D(i)比较,若D(J(l))>D(i)且D(J(l))≠l,l≤k,则作业J(l)可以向后延迟一个单位时间来处理,作业i可以在J(l)之前处理。

     1 package greedy;
     2 
     3 public class JS {
     4     int n=7;
     5     int [] D={0,2,3,1,3,4,5,2};//下标从1开始
     6     float[] P={0,15,12,11,10,8,5,4};//先对P进行非增排序
     7     int[] J=new int[n+1]; 
     8     int k;
     9     JS(){
    10         k=js(D,J,n,k);
    11         System.out.println("可调度作业数目:"+k);
    12         double sum=0;
    13         System.out.print("作业调度次序:"); 
    14         for(int i=1;i<=k;i++){
    15             System.out.print("->"+J[i]);
    16             sum+=P[J[i]];
    17         }
    18         System.out.println();
    19         System.out.println("总收益Sum="+sum);
    20     }
    21     public int js(int[] D,int[] J,int n,int k){
    22         int i,r;
    23         k=1;
    24         J[1]=1;//把第一个作业加入
    25         for(i=2;i<n;i++){
    26             r=k;
    27             while(D[J[r]]>D[i]&&D[J[r]]!=r){
    28                 r--;
    29             }
    30             if(D[J[r]]<=D[i]&&D[i]>r){
    31                 for(int l=k;l>r;l--){
    32                     J[l+1]=J[l];
    33                 }
    34                 J[r+1]=i;
    35                 k++;
    36             }
    37         }
    38         return k;
    39     }
    40     public static void main(String[] args) {
    41         // TODO Auto-generated method stub
    42         new JS();
    43     }
    44 
    45 }
    View Code

    测试结果:

  • 相关阅读:
    机器学习——模型评估与选择
    论文等级
    python简介
    记忆力
    PyQt 5控件
    PyQt5对话框
    PyQt 5事件和信号
    PyQt 5菜单和工具栏
    PyQt 5布局管理
    PyQt 5的基本功能
  • 原文地址:https://www.cnblogs.com/yuanzhenliu/p/5133168.html
Copyright © 2011-2022 走看看