Para alguien todavía interesado en esta pregunta ... Escribí una utilidad que utilicé para un propósito similar de ajustar archivos en un conjunto de discos/discos. Utiliza una interfaz de línea de comandos/basada en archivos. Las versiones están disponibles en C, C++, & Java (no C#).
http://whizman.com/code/diskfit.tgz
información más detallada se encuentra en el diskfit.tgz: Doc archivo/diskfit.txt.
(AGPL3)
Podríamos caracterizar la pregunta 0-1 múltiple mochila, o envasado bin lineal. (. Gracias Jon-skeet para el enlace sobre el problema de la mochila)
Dthorpe resuelve embalaje bin lineal, por exactamente suficientes papeleras/discos para adaptarse todos los archivos [muy bien O (n) u O (n lg n) rápida - también puede ser factible en una hoja de cálculo sin tener que escribir una secuencia de comandos].
Básicamente, diskfit (anteriormente ligado utilidad) Salidas de calificación grupos de archivos en torno a 0-1 sola mochila, y el usuario elige un disco grupos de archivos para montar en el disco-set - ayudar a la usuario (pero no se automatiza por completo) hacia ambos:
- empaque de contenedor lineal - para el conjunto completo de discos;
- 0-1 mochila múltiple: para cada subconjunto de discos 1..k del conjunto de discos completo (donde los archivos son prioritarios, también difieren en el valor).
Opción programática completa del conjunto de discos completo, sería una característica adicional. No sería suficiente aplicar una solución de una sola mochila 0-1, automáticamente por disco [ávidamente]. (Considere 3 mochilas de capacidad 6 y los artículos disponibles con el mismo valor y los pesos de: {1, 1, 2, 2, 3, 4, 5}. Aplicando 0-1 mochila a la primera mochila de forma aislada elegiría {1, 1, 2, 2} para obtener el valor total 4 - después de lo cual no podemos incluir todos los restantes 3 artículos en el restante & terceros mochilas - mientras que sabemos que podemos caber todos los artículos en las 3 mochilas como {1, 2, 3} & {1, 5} & {2, 4}.)
La ordenación no funcionará. Considere: 2 archivos grandes pueden llenar todo menos 1 byte del DVD (lo cual es un gran ajuste), pero si hay 3 archivos medianos que pueden llenarlo perfectamente, técnicamente es un mejor ajuste ... y funciona en la dirección opuesta también. Necesito llenarlo lo más completo posible antes de pasar al siguiente disco. –
@Jason Thuli Pero debes preguntarte cuál es tu objetivo; la cantidad máxima de bytes en un DVD o la cantidad mínima de DVD? esta fórmula satisface la segunda condición, pero no la primera (¿pero realmente la necesita la primera?) –
, iba a agregar exactamente lo mismo que intenté resolver por mi cuenta para divertirme ... mi primera idea, que probablemente no sea la mejor manera, es preguntarse "¿hay 1 archivo que ocupe todo el espacio?" y luego "¿qué tal 2?" y sigue yendo –