Pregunta

¿Cómo resolveríamos el problema de Knapsack si ahora tenemos que solucionar el número de elementos en la mochila de Knaps By un contenedor de matemáticas "constante $ l $ ?Este es el mismo problema (Peso máximo de $ w $ , cada artículo tiene un valor $ v $ ypeso $ w $ ), pero debe agregar exactamente $ l $ item(s) a la mochila (y obviamente necesita optimizar el valor total de la mochila).

Cada vez que he pensado en implementar esto hasta ahora (la programación dinámica, la fuerza bruta), ha resultado en tiempos de cómputo de fallas, o de cálculo del nivel de vida de un universo.Se aprecian cualquier ayuda o idea.

Editar: Estoy buscando soluciones de tiempo pseudo-polinomial

¿Fue útil?

Solución

Puede transformar este problema en una instancia de Knapsack. Deje que $ n $ sea el número de elementos, $ v $ sea el valor máximo de un elemento y supongamos que cada elemento pesa a la mayoría de $ w $ (de lo contrario se puede descartar).

Para asegurarse de seleccionar al menos $ l $ artículos:

  • agregar $ n (v + 1) $ al valor de cada elemento.
  • Ahora, el problema es equivalente al de maximizar el número de elementos seleccionados, rompiendo los vínculos a favor del conjunto de elementos con mayor valor total original, sujeto a restricciones de peso. Hay una solución que selecciona al menos $ l $ elementos IFF La solución óptima tiene un valor de al menos $ n (v +1) l $ .

Para asegurarse de seleccionar en la mayoría de $ l $ artículos:

  • agregar $ (w + 1) $ al peso de cada elemento.
  • agregar $ l (w + 1) $ a $ w $ .
  • .
  • Ahora, cada subconjunto de más de $ l $ los artículos pesan al menos $ (l + 1) (W + 1 )= L (W + 1) + (W + 1)> L (W + 1) + W $ , y por lo tanto, no es factible. Cada subconjunto de $ l $ los artículos que tenían un peso total de $ w $ , ahora pesa $ L (W + 1) + W $ , y por lo tanto es factible IFF $ w \ le w $ . Un subconjunto con menos de $ l $ Los elementos pueden ser factibles incluso si su peso general es más de $ w $ , sin embargo, su valor total siempre será más pequeño que $ n (v + 1) l $ .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top