Código Java, problema de programación de múltiples máquinas, cómo explicarlo
Implementación Java del problema de programación de múltiples máquinas (algoritmo codicioso)
Para obtener una descripción específica del problema y la implementación de C/C, consulte el sitio web [java]?view?plain?copy ?imprimir?
importar?java.util.ArrayList;?
importar?java.util.Collections;?
importar?java.util.LinkedList; ?
import?java.util.List;?
/**? *?Problema de programación multimáquina: ¿algoritmo codicioso? /?
public?class?JobMachine?{?
public?static?class?JobNode?implements?Comparable{?
int?id; ¿La etiqueta del trabajo?
int?time; //¿Tiempo del trabajo?
public?JobNode(int?id, int?time){?
this.id=id;?
p>this.time=time;?
}?
@Override?
público ?int?compareTo(Object?x)?{ //¿Ordenados por tiempo de mayor a menor?
int?times=((JobNode)x).time;?
if (timegt;times)?return?-1 ?
if(time==times)?return?0;?
return?1;?
}?
} ?
public?static?class?MachineNode?implements?Comparable{?
int?id;//Etiqueta de la máquina? p>
int?avail;/ /¿El momento en que la máquina está inactiva (es decir, el momento en que la máquina completa una determinada tarea)?
public?MachineNode(int?id, int? disponible){?
this.id= id;?
this.avail=avail;?
}?
@Override ?
public?int?compareTo(Object ?o)?{//Orden ascendente, ¿el primero de LinkedList es el más pequeño?
int?xs=((MachineNode)o) .avail;?
if(availlt; xs )?return?-1;?
if(avail==xs)?return?0;?
retorno?1;?
}?
}?
público?estático?int?codicioso(int[]?a?, int?m) {?
int?n=a.length -1; //El subíndice de a comienza desde 1, por lo que n (número de trabajos) = a.length-1?
int?sum=0;?
if( nlt;=m){?
for(int?i=0;ilt;n;i)?
sum =a[i 1];?
System.out.println("Para cada
A cada trabajo se le asigna una máquina");?
return?sum;?
}?
Listlt;JobNodegt;?d=new?ArrayListlt;JobNodegt ;();//d¿Guardar todos los trabajos?
for(int?i=0;ilt;n;i){//¿Guardar todos los trabajos en la Lista, cada elemento contiene una etiqueta y una hora? p>
JobNode?jb=new?JobNode(i 1, a[i 1]);?
d.add(jb);?
}? p>
Collections.sort(d);//¿Ordenar la lista de trabajos?
LinkedListlt; MachineNodegt;?h=new?LinkedListlt ();/ /h¿Guardar todas las máquinas?
for(int?i=1;ilt;=m;i){//¿Guardar todas las máquinas en LinkedList?
MachineNode? x=new?MachineNode(i, 0); // Inicialmente, el tiempo de inactividad de cada máquina (el tiempo para completar el trabajo anterior) es 0?
h.add(x);?
}?
int?test=h.size();?
for(int?i=0;ilt;n;i){?
Colecciones.sort(h) ;?
MachineNode?x=h.peek();?
System.out.println("Poner máquina" x .id "El período de tiempo desde " x.avail " a " (x.avail d.get(i).time) " se asigna al trabajo " d.get(i).id);?
x.avail =d.get(i) .time;?
sum=x.avail;?
}?
return?sum;?
}? p>
public?static?void?main(String[]?args)?{?
int[]?a={0, 2, 14, 4, 16, 6, 5, 3};?
int?m=3;?
int?sum=codicioso(a,m);?
System.out.println( "El tiempo total es: " suma);?
}?
}?
/**? Ejecutar resultado:
¿Asignar el período de tiempo de 0 a 16 para la máquina 1 al trabajo 4?
¿Asignar el período de tiempo de 0 a 14 para la máquina 2 al trabajo 2?
Asignar el período de tiempo de la máquina 3 ¿de 0 a 6 al trabajo 5?
¿Asignar el período de tiempo de la máquina 3 de 6 a 11 al trabajo 6?
¿Asignar el período de tiempo de la máquina 3 de 6 a 11 al trabajo 3? ¿el periodo de tiempo del 11 al 15 al trabajo 3?
¿Asignar el periodo de tiempo del 14 al 17 de la máquina 2 al trabajo 7?
Asignar el periodo de tiempo de la máquina 3 del 15 al 17 ¿Periodo de tiempo asignado al trabajo 1?
El tiempo total es: 17?
*/