Bueno, en este momento no funciona, cometiste un error en tu código. Aquí está la versión corregida:
0 1 2 3 N
elemento A B C D E
tamaño 3 4 7 8 9
val 4 5 10 11 13
typedef struct {int size; int val; } articulo;
- ¿Cómo podemos revertir una pila usando solo las operaciones push () y pop () sin usar ningún DS secundario?
- ¿Es la Biblia solo los algoritmos de aprendizaje automático de la realidad que nos dicen cómo se desarrolló, comenzando con el 0 que se convirtió en 1 para la luz?
- ¿Qué significa 'estructuras de datos de dimensión única' en programación?
- Si recibe fondos de miles de millones de dólares y tiene la tarea de crear un motor de búsqueda para competir con Google, ¿cómo sería su motor de búsqueda?
- ¿Cuáles son algunos libros similares a Programming Pearls?
int knap (int cap)
{
int i, espacio, max, t;
para (i = 0, max = 0; i <n; i ++)
{
if ((espacio = cap – elemento [i] .size)> = 0)
if ((t = knap (espacio) + elemento [i] .val)> max)
max = t;
}
retorno max;
}
Entonces, lo que hace este código es implementar el algoritmo de mochila de programación dinámica (problema de mochila). Cuando llama a la función knap (cap), calcula el valor máximo que puede tener una mochila de tamaño = cap. Para hacer esto, intenta colocar cada elemento por sí mismo y verifica el valor máximo posible de una mochila con el espacio restante, knap (cap-item [i] .size). Luego devuelve la combinación con el valor máximo.
También es bastante lento, debe introducir la memorización , que conduce a:
int memoize [MAXCAP];
// establece todo en -1
typedef struct {int size; int val; } articulo;
int knap (int cap)
{
if (memorizar [cap]! = – 1)
volver memorizar [cap];
int i, espacio, max, t;
para (i = 0, max = 0; i <n; i ++)
{
if ((espacio = cap – elemento [i] .size)> = 0)
if ((t = knap (espacio) + elemento [i] .val)> max)
max = t;
}
memorizar [cap] = max;
volver memorizar [cap];
}
Con la memorización, evita calcular cada llamada de función desde cero. La primera vez que llama a knap (cap) almacena el resultado en una tabla, por lo que simplemente lo devuelve cada vez que lo llama en el futuro en lugar de volver a calcularlo.