Name des Countdown-Zahlen-Rundenproblems - und algorithmische Lösungen?

10

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).

Dai
quelle
1
Ich löste diese grafisch - Verwendung Knoten die Ergebnisse von Berechnungen und Kanten darzustellen Operationen darstellen , die auf diesen Zahlen kann getan werden, dann ein Diagramm Suchalgorithmus verwenden , um die gewünschten Weg zu finden
ell
1
Aus dem Lesen der Regeln geht hervor, dass es möglich ist, keine perfekte Lösung zu finden - zum Beispiel, wenn die ausgewählten Zahlen (1, 1, 2, 2, 3, 3) sind und die Zielzahl 999 ist. Also wirklich Das Ziel für jeden Algorithmus wäre es, die nächstmögliche Lösung zu finden.
Rich Smith
1
@ell: Ist Ihre Grafiksuchlösung im Grunde eine Brute-Force-Suche?
Martin
Ich habe gerade eine Tiefensuche in meiner Implementierung verwendet, aber ich verstehe nicht, warum so etwas wie Dijkstra nicht verwendet werden konnte.
Ell
1
Wir haben einige ähnliche Shows in den Staaten: Wir bleiben etwa 6 Unter gebildeten Idioten in einem Haus für mehrere Wochen und filmen sie umeinander reden und schreien an einander. Das ist ungefähr so ​​nah, wie unser Fernseher in populären Shows etwas so Intellektuelles erreicht.
RBarryYoung

Antworten:

4

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 :

Gibt es bei einer Menge positiver Ganzzahlen und einer positiven ganzen Zahl b eine Teilmenge der Menge, so dass die Summe aller ganzen Zahlen in dieser Teilmenge gleich b ist ?

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.

Martin
quelle
Die Lösung für das Beispiel, obwohl es äußerst beeindruckend ist, ist nicht so kompliziert, wie es zunächst erscheinen mag. Sein Denkprozess, abzüglich offensichtlicherer Dinge, die er möglicherweise versucht hat, war wahrscheinlich "Ich kann mit (100 + 6) * 9 zu 954 gelangen, was ich über (100 + 6) * 3 * 75/25 tun kann. Ich habe noch eine 50 und 50/25 ist zwei, also kann ich die 50 abnehmen (100 + 6) * 3 * 75, bevor ich durch 25 "dividiere.
Tim Down
1

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.

gnasher729
quelle