¿Cuál es un buen algoritmo de clasificación para poner elementos en contenedores y mantener los contenedores según sea posible?

StackOverflow https://stackoverflow.com//questions/12700866

Pregunta

Así que en realidad voy a usar esto para hacer una generación de diseño de forma dinámica en EXTJS4, pero creo que puedo simplificar el problema para facilitar la discusión sin perder nada:

Digamos que tengo una lista de enteros que quiero colocar dentro de dos contenedores. Cuando termine, quiero que ambos contenedores sean "como sea posible", que en este caso significa que las sumas de los enteros dentro de cada contenedor están tan cerca entre sí, ya que podemos obtenerlos. En este escenario, no importa cuántos enteros terminen en cada contenedor, simplemente que sus sumas están cerca.

Aquí hay un ejemplo de una posible entrada y una salida deseable:

Integers: [1,7,13,3,6,8]
Container A: [13,6] (sum 19) 
Container B: [1,7,3,8] (sum 19)

Un enfoque ingenuo podría ser iterar sobre la lista de enteros una vez, y colocar a cada entero en el contenedor que actualmente tiene la suma más pequeña:

Integers: [1,7,13,3,6,8]
Container A: [1,13,8] (sum 22)
Container B: [7,3,6] (sum 16)

¿Qué algoritmo / enfoque lo sugerirían para enfrentar este problema? Me imagino que hay unos pocos potenciales. Si le resulta más fácil pensar en muestras de código, estaré implementando el producto final en JavaScript.

¡Gracias!


editar

Me gustan los dos enfoques presentados hasta ahora (gracias Cheeken y Sumudu Fernando), ambos de los cuales ofrecen buenos métodos para lograr rápidamente algo cerca de (o exactamente) la respuesta ideal. Para un conjunto de enteros lo suficientemente pequeño, me imagino que podría simplemente forzar un cálculo y definitivamente decir que la respuesta particular es la mejor (o atada para mejor). ¿Alguna sugerencia para hacer algo así? En otras palabras, un enfoque que garantiza una respuesta ideal al costo de ser potencialmente lento (o completamente inviable para grandes conjuntos de problemas).

¿Fue útil?

Solución

  1. calcula la suma de todos los elementos.
  2. calcule la mitad de la suma, s.
  3. Aplique la problema de mochila al número que realiza la suma objetivo s.
  4. coloque la solución en un recipiente y los elementos restantes en el otro contenedor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top