カウントダウン番号の名前の丸め問題-およびアルゴリズムによる解決策?


10

オーディエンスの非Britsの場合、昼間のゲーム番組のセグメントがあり、そこでは、競技者が6つの数字のセットとランダムに生成されたターゲットの数字を持っています。それらは、算術演算子のみを使用して6つの数値のいずれか(必ずしもすべてではない)を使用して目標数に到達する必要があります。すべての計算は正の整数になる必要があります。

例:Youtube:カウントダウン-これまでで最も異常な数字ゲーム?

ウィキペディアに詳細な説明があります:カウントダウン(ゲームショー)

例えば:

  • 応募者は6つの数字を選択します。2つの大きな数字(可能性には25、50、75、100が含まれます)と4つの小さな数字(数字1 .. 10、それぞれプールに2回含まれます)です。
  • ピック数がされている75502387の目標数で与えられます812
  • 1回の試行は、(75 + 50-8)* 7-(3 * 2)= 813(これは、ターゲットの5以内のソリューションに対して7ポイントを獲得します)
  • 正確な答えは、(50 + 8)* 7 * 2 = 812です(これは、ターゲットと正確に一致する10ポイントを獲得したことになります)。

明らかに、この問題はテレビが登場する前から存在していましたが、ウィキペディアの記事ではそれに名前を付けていません。私が通っていた小学校でも、このゲームがクラス間競技として「Crypto」と呼ばれていたのを見たことがありますが、検索しても何もわかりません。

私はそれに数回参加し、私の父は、ブルートフォースに問題を試みたExcelスプレッドシートを書いて、私は(それが唯一のこと、それが働いたか覚えていませんしませんでしたどのようなExcelの65535行の制限で、仕事)が、確かに問題のアルゴリズム的な解決策がなければなりません。人間の認識と同じように機能する解決策があるかもしれません(たとえば、並列で数値を「十分に近い」数で見つけ、候補を取得して「小さい」演算を実行する)。


1
次いで、これらの数字に行うことができる操作を表す所望の経路を見つけるために、グラフ探索アルゴリズムを使用する計算とエッジの結果を表すために使用ノード-私はこのグラフを解決
エル

1
ルールを読むと、たとえば、選択した数が(1、1、2、2、3、3)でターゲット数が999の場合、完全なソリューションに到達できない可能性があるように見えます。アルゴリズムの目標は、最も近い可能な解を見つけることです。
リッチスミス

1
@ell:グラフ検索ソリューションは、基本的にブルートフォース検索ですか?
マーティン

私は実装で深さ優先検索を使用しただけですが、ダイクストラのようなものが使用できなかった理由がわかりません。
エル

1
アメリカでもいくつかの似たようなショーがあります。私たちは家に約6匹の文盲のバカを数週間貼り付け、彼らがお互いについて話し、お互いに叫んいる様子を撮影します。それは、私たちのテレビが人気番組のこの知識人に近づくのとほぼ同じです。
RBarryYoung 2013年

回答:


4

免責事項:この回答はその質問に完全に答えるものではありません。しかし、コメントには長すぎます。

NPハード?私は、この問題はNP困難であると考えています。

ナップザック問題の特別なケースを考えてみましょう:

正の整数のセットと正の整数bが与えられた場合、サブセットのすべての整数の合計がbに等しくなるようなセットのサブセットが存在しますか?

これは私たちのカウントダウン問題にいくぶん似ているように聞こえ、それははるかに単純であるようです。ただし、ナップザック(およびこのナップザックの特殊なケース)はNPハードです(もちろんNPコンプリートです)。

カウントダウンがNP困難であることを証明するためにこれを使用することはできませんでした。分割を取り除くことができませんでした。私たちは千2を持って考えてみましょう、とB私は問題を転送しようとしたすべての方法では、少なくとも、カウントダウンして(?)= 7。これはナップザックと解けることはありませんが、常に。

さて、カウントダウンが本当にNP困難だった場合、非常に高い確率で、すべての可能性を試す総当たりよりもはるかに効率的なアルゴリズムは存在しないと推測できます。(そして、もしそのようなアルゴリズムを見つけたら、私たちは非常に有名になります。)

いいえ、効率的なアルゴリズムが存在する必要があるとは思いません。

経験則。質問にリンクされたYoutubeビデオには良い例があります:競技者は正確な回答952 =((100 + 6)* 3 * 75-50)/ 25を見つけました。これは私の直感に完全に反します。初めての方法:非常に大きな数を生成し、それを除算して結果を生成します。

一方、私たち人間、3桁の数値に到達するために(任意の例)50 * 75 * 100/2/3/7を試す必要がないと感じています。しかし、コンピュータは何も感じず、単純に計算します。

結局のところ、何らかのヒューリスティックを実装し、このヒューリスティックが正確な解決策を見つけられない場合でも、他のすべての解決策を試して、本当に何もないことを確認する必要があります。

Youtubeビデオの競技者がすることは、非常に多くの可能性を非常に迅速にチェックし、解決策を提供しない(または可能性がない)可能性をすばやく破棄することだと私は思います。

結論。アルゴリズムを実装するとき、a / b / c = a /(b * c)のような等しい計算を取り除くように注意することもできますが、これを行うのはかなり難しく、これによってランタイムが大幅に向上するかどうかはわかりません。

もちろん、コンピュータは人間よりも多くの可能性をチェックするのに高速です。そして最近では、スマートフォンでも非常に高速なので、すべての可能性を試すだけで、この問題を1秒以内に解決できると思います。(私はこれをテストしませんでした。)数値は6つしかありません。たとえば、60個あった場合は異なります。


この例の解決策は非常に印象的ですが、最初に現れるほど複雑ではありません。彼の思考プロセスは、彼が試したかもしれないより明白なものを差し引いて、「(100 + 6)* 3 * 75/25を介して実行できる(100 + 6)* 9を使用して954に到達できます。私は残り50で、50/25は2なので、25で割る前に50(100 + 6)* 3 * 75を割ることができます。
Tim Down

1

アルゴリズムは実際にはそれほど難しくありません。

2つの数値aとbが与えられると、a + b、abs(a-b)という結果を生成できます(負の数が許可されているかどうかはわかりません。その場合、a-bとa + bを生成できます)、a * b、結果が整数の場合はa / bまたはb / a したがって、可能な結果は最大5つの数値のセットです。これをS(a、b)と呼びます。

6つの数字a、b、c、d、e、fを考えてみましょう。

2つの数値の各サブセットについて、それらが生成できる数値を見つけます。

次に、3つの数値の各サブセットについて、それらが生成できる数値を見つけます。S(a、b、c)= S(S(a、b)、c)ユニオンS(S(a、c)、b)ユニオンS( S(b、c)、a)。

次に、4つまたは5つの数値の各サブセットについて同じで、次に6つの数値すべてについて同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.