Red de conocimiento informático - Aprendizaje de programación - Código Java, problema de programación de múltiples máquinas, cómo explicarlo

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?

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?

JobNode?jb=new?JobNode(i 1, a[i 1]);?

d.add(jb);?

}?

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;?

}?

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?

*/

上篇: ¿En qué paquete de software se encuentran los algoritmos de cifrado DES y MD5 en Java? ¿Cómo llamar a estos dos métodos por separado para implementar el cifrado y descifrado de los datos de entrada? 下篇: Video de análisis del código fuente de Okhttp2023 llegará pronto, este es mi quinto año trabajando en Alibaba. Hasta ahora, he estado profundamente involucrado en el campo de Android y tengo muy clara la dirección de la reforma y la innovación tecnológicas. El desarrollo de Android ha capturado rápidamente los corazones de las personas con sus ventajas de belleza, velocidad, eficiencia y apertura. Sin embargo, los materiales de aprendizaje avanzados que necesitan muchos entusiastas de Android no son lo suficientemente sistemáticos y completos. Este artículo es mi último resumen de algunos conocimientos avanzados sobre Android. Cubre una amplia gama de conocimientos, pero todos son puntos de conocimiento y puntos extra que casi a menudo se preguntan en las entrevistas. ¡En esta era de pagar por el conocimiento, la mejora de conocimientos y habilidades es fundamental! Comparto este material de aprendizaje aquí con la esperanza de ayudar a las personas necesitadas. El siguiente es un conjunto completo de materiales de aprendizaje para arquitectos de desarrollo móvil que pasé dos meses compilando. ¡Por favor, guárdalos! ¡Haga clic en la tarjeta a continuación para ver cómo obtener el PDF completo! Un conjunto completo de arquitectos de notas de estudio de la serie Android debe tener las habilidades necesarias para construir las bases. Comprenda las anotaciones genéricas de Java de forma sencilla. Programación concurrente transmisión y serialización de datos Principio de máquina virtual Java IO eficiente Análisis de código fuente del marco top 100 de Android Análisis de código fuente Retrofit2.0 Análisis de código fuente Okhttp3 Análisis de código fuente ButterKnife Análisis de código fuente MPAndroidChart Análisis de código fuente Glide Lea. Análisis del código fuente de Kcanary Análisis del código fuente de Universal-image-Loader Análisis del código fuente de EventBus3.0 Análisis del código fuente de zxing Análisis del código fuente de Picasso Uso de Lottie Android Explicación detallada y análisis del código fuente Análisis del código fuente de Fresco: proceso de carga de imágenes Optimización del rendimiento de Android Análisis práctico para desarrollar una APLICACIÓN El propósito esencial es servir a los usuarios, por lo que, sobre la base de funciones poderosas, qué APLICACIÓN tiene un rendimiento más estable y una mejor experiencia se ha convertido en el factor principal para que los usuarios elijan. La optimización del rendimiento es un proceso continuo y una habilidad esencial para los ingenieros de desarrollo de Android. En esta parte, analizaré la optimización del rendimiento a partir de casos reales de fabricantes de Internet de primera línea, encontraré y resolveré problemas en combates reales y me familiarizaré con problemas comunes de optimización del rendimiento. Tencent Bugly: una pequeña comprensión del algoritmo de coincidencia de cadenas iQiyi: solución de captura de fallas de la aplicación de Android-XCRASH ByteDance: comprensión profunda de uno de los marcos de Gradle: complemento, extensión, tecnología BuildRCC Baidu APP: práctica de optimización de la primera pantalla de Android H5 Cliente Alipay Análisis de arquitectura: optimización de la velocidad de inicio del cliente Android "recolección de basura" Ctrip: práctica de arquitectura de componentes del proyecto Zhixing Android NetEase News Optimización de compilación: cómo hacer que su velocidad de compilación sea "relámpago" Kotlin, como nuevo lenguaje de programación funcional, tiene más seguridad y es más conciso , versátil, interoperable y muchas otras ventajas, ya sea que se use para el desarrollo de Android o Java, Kotlin puede reducir una gran cantidad de código y mejorar en gran medida la eficiencia del trabajo. En la actualidad, muchas empresas han abandonado Java y han cambiado a Kotlin, y todas tienen requisitos más altos para el lenguaje Kotlin en la contratación.