Angenommen, ich esse fünf Mahlzeiten pro Tag, und da es sieben Tage in der Woche gibt, habe ich Rezepte für sieben von jeder Mahlzeit, für insgesamt 35 Rezepte. Jedes Rezept hat eine Kalorienzahl. Jeder Tag muss ein Rezept pro Mahlzeit enthalten, und jedes Rezept ist auf eine bestimmte Mahlzeit festgelegt (z. B. können Sie keine Pfannkuchen zum Abendessen haben). Alle 35 Rezepte müssen in der Lösung enthalten sein, damit ein Rezept während der Woche nicht wiederholt werden kann.
Ich möchte die Anordnung der Mahlzeiten finden, die die gleichmäßigste Kalorienzahl pro Tag ergeben - das heißt, ich möchte den Unterschied in den von Tag zu Tag verbrauchten Gesamtkalorien minimieren.
Dies ist kein Hausaufgabenproblem - es ist tatsächlich wahr! Ich kann mir keinen besseren Ansatz als Brute-Force einfallen lassen, und es gibt 7! ^ 4 Kombinationen, was sehr viel ist.
quelle
Antworten:
So formulieren Sie Ihr Problem formeller:
Sie haben 5 Listen mit jeweils 7 Nummern. Sie müssen 7 Listen mit jeweils 5 Zahlen erstellen und die Lösung finden, die den minimalen Unterschied zwischen der Liste mit der größten Zahlensumme und der Liste mit der kleinsten aufweist.
Wenn Sie die optimale Lösung ohne Heuristik finden möchten, haben Sie meiner Meinung nach keine andere Wahl, als aufzuzählen, aber Sie müssen nicht alle aufzählen.
Welche Lösung Sie auch finden, wenn Sie sie als "bisher am besten gefunden" registrieren, registrieren Sie ihre Leistung in Bezug auf Ihre Metrik (ich glaube, es ist ein Min-Max-Unterschied). Wenn ein Lösungszweig davon eindeutig abseits liegt, hören Sie auf, ihn aufzuzählen. Protip: Nicht gebaute Tage haben bestenfalls eine Kalorienzahl, die der Durchschnitt aller verbleibenden Mahlzeiten ist. Stellen Sie sich also vor, Sie haben Listen, die
[10, 2, 2, 1, 1, 0, 0]
für alle 5 Mahlzeiten gelten, und Sie haben die Lösung 10 für jede Mahlzeit für Tag 1 erstellt. Sie wissen, dass die verbleibenden Tage durchschnittlich 5 Kalorien pro Tag betragen, sodass der Unterschied mindestens 45 beträgt Sie haben zuvor eine Lösung gefunden, zum Beispielmax - min = 10
, dass Sie nicht weiter gehen müssen. Sie werden direkt ein anderes Menü für Tag 1 ausprobieren.quelle
Dies ist nur ein Hack, aber es bringt Sie in die Nähe.
Nur 3 Mahlzeiten
Sie floppen im Grunde genommen Mahlzeiten, wenn sich die zwei Tage dem durchschnittlichen C # nähern
Ein besserer Ansatz wäre, einen Boolen auf Flop zurückzugeben und bis zum Abschluss zu iterieren.
Flop könnte schlauer werden. Möglicherweise sind Sie in der Lage, das Frühstück nicht zu floppen, um das Mittag- und Abendessen zu floppen. Es gibt möglicherweise harte Code-Permutationen. Dies ist eher eine Sortierung, bei der Flop-Werte eher als Sortierung verwendet werden.
quelle
Berechnen Sie zuerst die durchschnittliche Kalorienzahl pro Mahlzeit. Berechnen Sie dann die durchschnittliche Anzahl der Farben pro Tag. Dies sind die Metriken, an denen man messen kann. Als nächstes sortieren Sie die Mahlzeiten.
Wählen Sie jetzt einfach die höchsten und niedrigsten Mahlzeiten aus der Sorte aus. Wenn sich eine Mahlzeit im selben Zeitfenster befindet, müssen Sie zum nächstniedrigeren oder höchsten Punkt wechseln, bis Sie eine Mahlzeit finden, die sich nicht in diesem Zeitfenster befindet (Abendessen usw.). Tun Sie dies für die ersten 4 Mahlzeiten (hi / low). Wählen Sie bei der 5. Mahlzeit eine Mahlzeit aus, die dem Durchschnitt am nächsten kommt. Speichern Sie die 5. Mahlzeit in einem separaten Eimer. Spülen und 7 Mal wiederholen.
Dies ist Ihre erste Mahlzeit. Das wird ziemlich gleichmäßig sein. Wenn Sie die optimale Verteilung wünschen, können Sie mit der 5. Mahlzeit eine weitere Verfeinerung vornehmen.
Gehen Sie durch den Eimer mit der 5. Mahlzeit und versuchen Sie, die 5. Mahlzeit zwischen den Tagen auszutauschen, um festzustellen, ob die Mahlzeiten noch weiter ausgeglichen sind. Sie müssen immer noch dieselben Regeln anwenden (nicht mehr als eine Mahlzeit pro Zeit). Man kann oder kann nicht einen gleichmäßigeren Satz bekommen. Verwenden Sie die berechneten Durchschnittswerte früher, um festzustellen, ob eine Verbesserung vorliegt oder nicht. Es wird viel weniger Kombinationen geben, da die ersten 4 Mahlzeiten basierend auf Hoch / Niedrig festgelegt werden.
quelle