Für die Nicht-Briten im Publikum gibt es einen Abschnitt einer Tagesspielshow, in der die Teilnehmer einen Satz von 6 Zahlen und eine zufällig generierte Zielnummer haben. Sie müssen die Zielzahl mit einer beliebigen (aber nicht unbedingt allen) der 6 Zahlen erreichen, indem sie nur arithmetische Operatoren verwenden. Alle Berechnungen müssen zu positiven ganzen Zahlen führen.
Ein Beispiel: Youtube: Countdown - Das außergewöhnlichste Zahlenspiel aller Zeiten?
Eine detaillierte Beschreibung finden Sie auf Wikipedia: Countdown (Game Show)
Zum Beispiel:
- Der Inhalt wählt 6 Zahlen aus - zwei große (Möglichkeiten umfassen 25, 50, 75, 100) und vier kleine (Zahlen 1 .. 10, jeweils zweimal im Pool enthalten).
- Die Zahlen ausgewählt sind 75, 50, 2, 3, 8, 7mit einer Zielzahl gegeben 812.
- Ein Versuch ist (75 + 50 - 8) * 7 - (3 * 2) = 813 (Dies ergibt 7 Punkte für eine Lösung innerhalb von 5 des Ziels)
- Eine genaue Antwort wäre (50 + 8) * 7 * 2 = 812 (Dies hätte 10 Punkte erzielt, die genau zum Ziel passen).
Offensichtlich gab es dieses Problem vor dem Aufkommen des Fernsehens, aber der Wikipedia-Artikel gibt ihm keinen Namen. Ich habe dieses Spiel auch in einer Grundschule gesehen, in der ich das Spiel "Crypto" als Klassenwettbewerb genannt habe - aber die Suche danach zeigt jetzt nichts mehr.
Ich habe ein paar Mal daran teilgenommen und mein Vater hat eine Excel-Tabelle geschrieben, die versucht hat, das Problem brutal zu erzwingen. Ich erinnere mich nicht, wie es funktioniert hat (nur, dass es nicht funktioniert hat, was mit dem Zeilenlimit von Excel 65535), aber Sicherlich muss es eine algorithmische Lösung für das Problem geben. Vielleicht gibt es eine Lösung, die so funktioniert wie die menschliche Wahrnehmung (z. B. parallel, um Zahlen „nah genug“ zu finden, dann Kandidaten zu nehmen und „kleinere“ Operationen durchzuführen).
Antworten:
Haftungsausschluss: Diese Antwort beantwortet die Frage nicht vollständig. Aber es ist zu lang für einen Kommentar.
NP-hart? Ich glaube, dieses Problem könnte NP-schwer sein .
Betrachten Sie einen Sonderfall des Rucksackproblems :
Dies klingt ähnlich wie unser Countdown-Problem und scheint viel einfacher zu sein. Knapsack (und dieser spezielle Fall von Knapsack) ist jedoch NP-hart (und natürlich NP-vollständig).
Ich habe es nicht geschafft, dies als Beweis dafür zu verwenden, dass Countdown NP-hart ist. Ich konnte die Teilung nicht loswerden. Bedenken Sie, wir haben tausend 2 und b = 7. Dies wird mit Knapsack niemals lösbar sein, aber immer (?) Mit Countdown, zumindest auf alle Arten, auf die ich versucht habe, das Problem zu übertragen.
Nun, wenn Countdown wirklich war NP-hart, könnten wir , dass mit sehr hohen Wahrscheinlichkeit ableiten kein Algorithmus, der wesentlich effizienter ist als Brute-Force alle Möglichkeiten zu versuchen. (Und wenn wir einen solchen Algorithmus finden sollten, werden wir sehr berühmt.)
Nein, ich denke nicht, dass es einen effizienten Algorithmus geben muss .
Heuristik. Das in der Frage verlinkte Youtube-Video hat ein schönes Beispiel: Der Teilnehmer fand eine genaue Antwort 952 = ((100 + 6) * 3 * 75 - 50) / 25. Das ist völlig gegen meine Intuition, das hätte ich nie versucht Weg beim ersten Mal: Produziere eine sehr große Zahl, teile sie dann und erhalte das Ergebnis.
Andererseits haben wir Menschen das Gefühl, dass wir nicht versuchen müssen (willkürliches Beispiel) 50 * 75 * 100/2/3/7, um eine dreistellige Zahl zu erreichen. Aber Computer fühlen nichts, sie berechnen einfach.
Wenn wir einige Heuristiken implementiert haben und diese Heuristiken keine genaue Lösung finden, müssen wir immer noch alle anderen Lösungen ausprobieren, um sicherzustellen, dass es wirklich keine gibt.
Was der Kandidat im Youtube-Video tut, ist meiner Meinung nach, sehr schnell eine große Anzahl von Möglichkeiten zu prüfen und diejenigen, die keine (oder wahrscheinlich auch keine) Lösung bieten, schnell zu verwerfen.
Fazit. Bei der Implementierung eines Algorithmus könnte man darauf achten, gleiche Berechnungen wie a / b / c = a / (b * c) zu entfernen, aber ich denke, das ist ziemlich schwierig und ich weiß nicht, ob dies die Laufzeit signifikant verbessert.
Computer sind natürlich schneller als Menschen, wenn es darum geht, eine Vielzahl von Möglichkeiten zu prüfen. Und heutzutage sind sogar Smartphones so schnell, dass sie dieses Problem innerhalb einer Sekunde lösen können, indem sie einfach alle Möglichkeiten ausprobieren. (Ich habe das nicht getestet.) Es gibt nur sechs Zahlen, es wäre anders, wenn es zB 60 davon gäbe.
quelle
Ein Algorithmus ist eigentlich nicht sehr schwierig.
Bei zwei Zahlen a und b können wir die Ergebnisse a + b, abs (a - b) erzeugen (ich weiß nicht, ob negative Zahlen zulässig sind, in diesem Fall können wir a - b und a + b erzeugen), a * b und möglicherweise a / b oder b / a, wenn das Ergebnis eine ganze Zahl ist. Die möglichen Ergebnisse sind also ein Satz von bis zu fünf Zahlen. Nennen Sie diese Menge S (a, b).
Nehmen Sie sechs Zahlen a, b, c, d, e und f.
Suchen Sie für jede Teilmenge von zwei Zahlen die Zahlen, die sie erzeugen können.
Suchen Sie dann für jede Teilmenge von drei Zahlen die Zahlen, die sie erzeugen können: S (a, b, c) = S (S (a, b), c) Vereinigung S (S (a, c), b) Vereinigung S ( S (b, c), a).
Dann das gleiche für jede Teilmenge von 4 oder 5 Zahlen, dann für alle 6 Zahlen.
quelle