¿Cómo distribuye Python cadenas de diferentes longitudes en N archivos de la manera más uniforme posible? La cadena de cada línea en su conjunto no se puede romper.
Imagina cada fila de cuerda como un objeto, y la longitud de la cuerda es el tamaño del objeto. Cada archivo equivale a una caja diferente. El tamaño de la caja es fijo, y la suma de los volúmenes de los artículos cargados no puede exceder la capacidad total de la caja.
El problema es: cómo empaquetar todos los artículos en la menor cantidad de cajas posible, o cómo hacer que tantas cajas como sea posible sean más eficientes, y problemas relacionados similares.
La respuesta a este tipo de preguntas no es un simple número, requiere una estrategia: los elementos 1...n se ponen en la casilla 1...Male (Male
Para La principal diferencia entre bidimensional y tridimensional es la complejidad de la solución, pero en términos generales, una idea de solución se puede extender de una dimensión a dos dimensiones o tres dimensiones.
Actualmente, existe. No hay un óptimo global para este tipo de solución (es decir, ningún algoritmo puede garantizar el resultado óptimo en todas las situaciones), pero existen muchos algoritmos que pueden obtener soluciones óptimas locales, como el algoritmo codicioso más común o la programación dinámica. /p>
La idea del algoritmo codicioso es muy simple: organiza todos los elementos en orden de mayor a menor, toma una caja e intenta que quepa el elemento más grande, si no, intenta que quepan los elementos más pequeños. , y así sucesivamente hasta que todos los elementos estén empaquetados en la caja.
El algoritmo es simple, pero en muchos casos el efecto no es el ideal.
Algoritmo codicioso
El. La idea de la programación dinámica es colocar un artículo en la caja, lo que plantea una nueva pregunta: ¿cómo empaquetarlos cuando se utilizan todos los artículos descargados y el espacio restante en la caja? Diferentes proyectos tendrán muchos problemas de este tipo. Elegir el método con el menor espacio restante es la solución óptima local. En términos generales, esto es más adecuado para la recursividad, pero su complejidad es mucho mayor que la
programación dinámica
De lo contrario, muchas tesis doctorales. se puede publicar sobre problemas de empaquetado.
En respuesta al problema del tema, la solución al algoritmo codicioso es leer cada línea, luego ordenar y cargar la caja con el mayor espacio restante (es decir, el cuadro con el menor contenido) de grande a pequeño
Puede consultar el siguiente método de procesamiento:
.