O que é um bom algoritmo de ordenação por colocar elementos em contêineres e manter recipientes, como até mesmo possível?

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

Pergunta

Então eu vou usar isso para fazer algumas dinâmicas em forma de layout de geração em ExtJS4, mas acho que pode simplificar o problema para baixo para facilitar a discussão, sem perder nada:

Vamos dizer que eu tenho uma lista de inteiros que eu quero colocar dentro de dois contêineres.Quando eu terminar eu quero tanto recipientes a serem "quanto possível", o que significa, neste caso, as somas dos números inteiros, dentro de cada recipiente são tão próximos uns dos outros, como podemos obtê-los.Neste cenário, não importa quantos números inteiros final, em cada recipiente, basta que os seus valores são, de perto.

Aqui está um exemplo de uma entrada possível e desejável de saída:

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

Uma alternativa poderia ser a de iterar sobre o inteiro lista de uma vez, e colocar o que cada número inteiro no recipiente que atualmente tem a menor soma:

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

Que algoritmo / abordagem que vocês sugerem para combater esse problema?Eu imagino que há alguns potenciais.Se você achar que é mais fácil pensar em exemplos de código, eu vou ser o de execução e o produto final em javascript.

Obrigado!


EDITAR

Eu como as duas abordagens apresentadas até agora (graças cheeken e sumudu fernando), os quais dão bons métodos para rapidamente alcançar algo próximo (ou exatamente) a resposta ideal.Para um pequeno o suficiente conjunto de números inteiros, eu imagino que você poderia apenas a força bruta de um cálculo e dizer definitivamente que a resposta particular é o melhor (ou amarrado para melhor).Alguma sugestão para fazer algo assim?Em outras palavras, uma abordagem que garante uma resposta ideal ao custo de potencialmente ser lenta (ou completamente inviável para grandes conjuntos de problemas).

Foi útil?

Solução

  1. Calcular a soma de todos os elementos.
  2. Calcule a metade da soma, s.
  3. Aplicar a Mochila problema o número tornando o alvo soma s.
  4. Colocar a solução em um recipiente, e os elementos restantes em outro recipiente.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top