Suponha que eu coma cinco refeições por dia e, como há sete dias na semana, tenho receitas para sete de cada refeição, para 35 receitas no total. Cada receita tem uma contagem de calorias. Cada dia deve conter uma receita por refeição e cada receita é fixada em uma refeição específica (por exemplo, você não pode comer panquecas no jantar). Todas as 35 receitas devem estar na solução, para que uma receita não possa ser repetida durante a semana.
Quero encontrar o arranjo de refeições que proporcionará a contagem de calorias mais uniforme por dia - ou seja, quero minimizar a diferença no total de calorias consumidas no dia a dia.
Este não é um problema de lição de casa - é realmente verdade! Não posso apresentar uma abordagem melhor do que a força bruta, e há 7! ^ 4 combinações, o que é muito.
fonte
Respostas:
Para fazer uma abordagem mais formal ao seu problema:
Você tem 5 listas de 7 números cada. Você precisa criar 7 listas de 5 números cada e encontrar a solução que tenha a diferença mínima entre a lista que possui a maior soma de números e a menor.
Se você deseja encontrar a solução ideal sem heurística, acredito que você tem poucas opções além de enumerar, mas não precisa enumerar todas elas.
Qualquer que seja a solução encontrada, ao registrá-la como "a melhor encontrada até agora", registre o desempenho da sua métrica (acredito que seja a diferença min-max). Então, se um ramo de solução estiver claramente fora do caminho, pare de enumerá-lo. Protip: dias não criados terão, na melhor das hipóteses, uma contagem de calorias que é a média de todas as refeições restantes. Então, imagine que você tem listas
[10, 2, 2, 1, 1, 0, 0]
para todas as 5 refeições e criou a solução 10 em cada refeição para o dia 1. Você sabe que os dias restantes terão uma média de 5 calorias por dia, portanto a diferença será de pelo menos 45 e, se você encontrou anteriormente uma solução de, digamosmax - min = 10
, que não precisa ir mais longe. Você tentará diretamente outro menu para o dia 1.fonte
Isso é apenas um truque, mas você fica perto
Apenas 3 refeições
Você basicamente fracassa nas refeições se isso aproxima os dois dias da média de C #
Uma abordagem melhor seria retornar um boolen no Flop e iterar até a conclusão.
Flop pode ficar mais esperto. Você pode não tomar café da manhã no almoço e jantar. Talvez haja permutações de código rígido. Isso é mais como uma classificação em que os valores de flop, em vez de classificação.
fonte
Primeiro, calcule a contagem média de calorias por refeição. Em seguida, calcule a contagem média de cores por dia. Essas serão as métricas com as quais se pode medir. Em seguida, classifique as refeições.
Agora basta escolher entre as refeições mais alta e mais baixa. Se uma refeição estiver no mesmo horário, você terá que ir para o próximo mais baixo ou mais alto até encontrar uma refeição que não esteja nesse horário (jantar, etc.). Faça isso nas primeiras 4 refeições (alta / baixa). Na quinta refeição, escolha uma refeição que mais se aproxime da média. Salve a quinta refeição em um balde separado. Enxágüe e repita 7 vezes.
Este será o seu conjunto inicial de refeições. Isso será bem equilibrado. Se você deseja uma distribuição ideal, pode ser feito um refinamento adicional com a 5ª refeição.
Percorra o balde da 5ª refeição e tente trocar as 5ª refeições entre os dias para verificar se as refeições estão ainda melhores. Você ainda terá que aplicar as mesmas regras (não mais que uma refeição por vez). Pode-se ou não obter um conjunto mais uniforme. Use as médias calculadas anteriormente para ver se há uma melhoria ou não. Haverá muito menos combinações, já que as primeiras 4 refeições são fixadas com base em alto / baixo.
fonte