Estas dos aproximaciones representan el concepto de algoritmos voraces, donde se selecciona una estrategia que permite decidir si un elemento se agrega o no a la solución. En los casos mencionados se utilizaba la estrategia del mayor costo o la del menor peso. Una mejor solución se presenta cuando se utiliza el costo por unidad de peso para ordenar los elementos, de esta manera, un elemento muy caro no se agrega si pesa demasiado en comparación con otro de menor valor, pero de mucho menor peso. La función resolverProblema queda entonces de la siguiente manera:
public void resolverProblema() { // Comparador para ordenar los elementos del almacen por valor Comparator cmp = new Comparator<Elemento>() { public int compare(Elemento x, Elemento y) { return (int) (x.valor/x.peso - y.valor/y.peso); } }; Collections.sort(almacen,cmp); // ordena usando el comparador anterior Collections.reverse(almacen); // reversa el orden de los elementos double pesoMochila=0; int posicion=0; while(pesoMochila<pesoMaximo && posicion < almacen.size()) { Elemento tmp = almacen.get(posicion); if(pesoMochila + tmp.peso <= pesoMaximo) { mochila.add(tmp); pesoMochila+=tmp.peso; } posicion++; } }
En cuanto al desempeño de este método, su complejidad es la equivalente al proceso de ordenación de la lista de elementos por su valor por unidad de peso, que es O(N log N), ya que el proceso de llenado de la mochila es lineal.
En el caso de ejemplo, este método da una respuesta con un peso total de 18 Kg y un costo de $945, mientras que la respuesta obtenida por backtracking es de 20 Kg con un costo de $955, lo que muestras que se obtiene un valor muy cercano al óptimo en una fracción del tiempo.
Solución al problema de la suma de subconjuntos aplicable al problema de la mochila, mediante computación analógica en:
ResponderBorrarhttps://pnpanalogo.wordpress.com/2016/01/14/22/
Hola
ResponderBorrarFue de mucha ayuda el codigo en verdad estoy muy agradecido peor me gustaria saber por que restas de esta manera:
return (int) (x.valor/x.peso - y.valor/y.peso);
moncler jackets
ResponderBorrarcanada goose
zx flux
cheap jordans
yeezy
hermes handbags
jordan shoes
nike air vapormax
yeezys
timberland boots
xiaofang20191218