Dados N cajas grandes y M cajas pequeñas de diferentes tamaños, ¿cómo elegir una caja grande óptima para empacar todas las cajas más pequeñas?

Pensemos en las posibles soluciones, comenzando por la solución más simple pero más lenta primero. Por ejemplo, puede probar todas las posiciones posibles para cada cuadro. Esto no es especialmente difícil, pero esta solución tomaría un tiempo exponencial en el tamaño y el número de cajas. Sin embargo, puede hacer esto más rápido si observa que cada cuadro nuevo podría tocar una superficie existente, mejorando así la solución al tiempo exponencial en el número de cuadros. Si piensa más en ello, puede mejorar aún más esta solución aprovechando la simetría y la poda.

Sin embargo, en última instancia, no existe una solución conocida que funcione mejor que el tiempo exponencial: el problema es NP completo. De hecho, como se describe en mi respuesta anterior a ¿Cómo podemos cubrir un área MxN con un costo mínimo, a partir de un conjunto de mosaicos que tienen diferentes dimensiones y diferentes costos ?, los problemas de empaque generalmente son NP-completos incluso en 2D. Aunque los problemas de NP completo pueden parecer intratables, aún puede ser interesante experimentar con varios métodos: simplemente comience a codificar y vea a dónde lo lleva.

Recientemente revisé un componente de PHP que abordaba el problema de instalar paquetes en camiones como parte del problema de entrega de logística. El llenado de la capacidad de volumen del camión es solo parte del problema, pero parece ser el mismo problema que desea resolver.

PHP Algoritmo Clarke y Wright: resuelva un problema de enrutamiento de camiones con Clarke & Wright

Su descripción es un poco vaga, pero la mayoría de las interpretaciones conducirán a un problema de empaquetado del contenedor NP-completo.

More Interesting

¿Debería un principiante construir cosas y contribuir a proyectos de código abierto antes de aprender algoritmos?

¿Cuál es la diferencia entre árboles binarios completos y completos?

¿Qué algoritmo usa YouTube para crear la lista de sugerencias de reproducción automática?

¿Cuál es la diferencia entre hashing y encriptación?

¿Cómo puede el paralelismo mejorar el algoritmo de fuerza bruta?

¿Cuáles son algunos de sus mejores algoritmos de C ++ o C que está orgulloso de haber escrito?

¿Son SHA256 y AES256 funciones hash o cifrados o algoritmos?

Cómo revertir un número promedio de números sin los números

Cómo contar el número de n rutas de borde que comienzan desde el nodo u en un DAG (gráfico acíclico dirigido)

¿Cuál es un buen enfoque de aprendizaje automático para recomendar noticias basadas en el historial de lectura de un usuario?

¿Cuál es la diferencia entre los siguientes dos fragmentos de código?

¿Qué debo hacer después de aprender Python? ¿Programación competitiva o aprender Djanjo o aprender algoritmos y estructura de datos en Python?

¿Algún consejo para estudiar la complejidad del espacio para programar entrevistas? ¿Cuáles son algunos buenos recursos para aprender sobre la complejidad del espacio?

¿Cómo se hace un motor de chatbot como Wit.ai o API.AI? ¿Cómo puedo hacer una versión simple? Proporcionarme algunos algoritmos y técnicas.

¿Cuál es la mejor manera de usar la notación O grande para determinar la tasa de crecimiento del tiempo de ejecución de un algoritmo?