El problema de la mochila algorítmica es interesante y forma parte del primer programa de ciencia digital e informática.
Este problema ilustra los algoritmos glotón que enumeran todas las posibilidades de resolver un problema para encontrar la mejor solución.
El problema de la mochila es un problema de optimización, es decir, una función que debe ser maximizada o minimizada y restricciones que deben cumplirse.
El problema de la mochila
Para una mochila de máxima capacidad de artículos P y N cada uno con su propio peso y un valor establecido, tire los artículos dentro de la mochila para que el contenido final tenga el máximo valor.

Ejemplo de una declaración:
- Capacidad máxima de la mochila: 11 unidades
- Número de artículo: 5
- Valores de objeto: $10.50,20,30.60
- Peso de los objetos: ‘1,5,3,2,4’
¿Cuál es el valor máximo que se puede poner en la mochila teniendo en cuenta la restricción de capacidad máxima de la bolsa que es 11?
Algoritmo gluttonoso
Una solución eficaz es utilizar un algoritmo glotón. La idea es calcular la relación valor/peso para cada objeto y ordenar el objeto en función de esta relación calculada.
Toma el objeto con la proporción más alta y agrega hasta que no puedaagregar más.
En versión fraccionaria es posible añadir fracciones de artículo a la mochila.
Implementación del problema en versión no fraccionada
Aquí está una implementación del problema en una versión no fraccionada, es decir, no se puede agregar una fracción de un objeto a la bolsa. Solo se pueden agregar objetos enteros.
itemsac clase: def __init__ (auto, peso, valor, índice): self.index - índice self.weight - peso self.value self.report - valor // peso #Fonction para la comparación entre dos ObjectsSac #On compara la relación calculada para ordenarlas def __lt__ (yo, otros): devolver self.report< other.rapport def getValeurMax (pesos, valores, capacidad): TableTrie[] para i en el rango: tableTrie.append (ObjectSac (peso[i]s, valore[i]s, i)) #Trier los elementos de la bolsa por su informe tableTrie.sort (reverse - True) MeterValeur - 0 para el objeto en tableauTrie: WeightCourant - int (object.weight) ValueCourante - int (object.value) si la capacidad - weightsCourant '0: #on añade el objeto a la bolsa #On resta capacidad capacidad - weightsCourant MeterValeur - ValueCourante #On añade valor a la bolsa devolver contraValeur Pesos[1,5,3,2,4] Valores[10,50,20,30,60] capacidad - 11 Valor máximo - getValeurMax (peso, valores, capacidad) (valor máximo en la mochila", ValueMax)
El resultado es el siguiente:
py sacados.py Valor máximo en mochila - 120
Implementación del problema en versión fraccionaria
En una versión fraccionaria del problema de la mochila se pueden añadir fracciones de objeto a la mochila.
itemsac clase: def __init__ (auto, peso, valor, índice): self.index - índice self.weight - peso self.value self.report - valor // peso #Fonction para la comparación entre dos ObjectsSac #On compara la relación calculada para ordenarlas def __lt__ (yo, otros): devolver self.report< other.rapport def getValeurMax (pesos, valores, capacidad): TableTrie[] para i en el rango: tableTrie.append (ObjectSac (peso[i]s, valore[i]s, i)) #Trier los elementos de la bolsa por su informe tableTrie.sort (reverse - True) MeterValeur - 0 para el objeto en tableauTrie: WeightCourant - int (object.weight) ValueCourante - int (object.value) si la capacidad - weightsCourant '0: #on añade el objeto a la bolsa #On resta capacidad capacidad - weightsCourant MeterValeur - ValueCourante #On añade valor a la bolsa Otro: fracción - capacidad / pesoCouring MeterValeur -Valor Courante - fracción capacidad - int (capacidad - (weightsCourant - fracción)) Romper devolver contraValeur Pesos[1,5,3,2,4] Valores[10,50,20,30,60] capacidad - 11 Valor máximo - getValeurMax (peso, valores, capacidad) (valor máximo en la mochila", ValueMax)
El resultado es el siguiente:
py sacados.py Valor máximo en mochila - 140.0