これはNP完全問題ですか?


10

次の問題ステートメントを検討してください。

最初の数が与えられると、あなたとあなたの友人は交代でそれから完全な四角形を引きます。ゼロに勝つ最初のものは勝利します。例えば:

初期状態:37

Player1は16を減算します。状態:21

Player2は8を減算します。状態:13

Player1は4を減算します。状態:9

Player2は9を減算します。状態:0

Player2が勝利!

初期状態が与えられ、最適な動き、つまりゲームの勝利につながることが保証されている動きを返すプログラムを記述します。可能な動きがあなたを勝利状態に導くことができないなら、-1を返します。

この問題は、動的プログラミングを使用して疑似多項式時間で解決できます。アイデアは、長さnnは初期状態)の配列を下から上に最適な移動で埋めるか、または移動が勝てない場合は-1です。これは、O(n * sqrt(n))を必要とします。これは、すべての数値について、それよりも小さい可能性のあるそれぞれの完全な二乗を減算することを考慮する必要があるためです(それらの〜sqrt(n)があります)。ただし、これは疑似多項式のランタイムの複雑さです。これは、ランタイムがバイナリの入力サイズ(数値を表すために使用されるビット数)に関連して実際に指数関数的にスケーリングされるためです。

誰でもこの問題を解決するための多項式アルゴリズムを考えることができますか?そうでない場合、それはNP-Completeでしょうか?どうして?


1
好奇心から、なぜそれがNP完全であるかを具体的に尋ねるのですか?(個人的には、私はそれがNPでもないことを推測しましたが、実際にはわかりません。)
ruakh

@ruakh私は最近、コーディングのインタビュー中にこの問題に遭遇し、私が説明した動的プログラミングを使用して疑似多項式ソリューションを提案しました。しかし、問題について注意深く検討した後、多項式時間アルゴリズムを思い付くことができませんでした。これが実際にはNP(-Complete)の問題ではないのかとすぐに自問し始めました。
マーティンコープス2017

どのポジションが勝ちポジションで、どのポジションが負けポジションかを計算してみましたか?おそらくパターンが発生します。
Yuval Filmus 2017

@YuvalFilmus Wikipediaによると、このパターンの既知の公式はありません(OEISのシーケンスA030193
Martin Copes

そうです、私はこの情報を使って回答を投稿するつもりでした。A224839も参照してください。
Yuval Filmus

回答:


6

損失ポジションのシーケンスは、グランディ値 1、A224839を持つポジションのシーケンスと同様に、OEIS、A030193にあります。百科事典はいくつかの関連記事を引用しています。おそらくそれらのいくつかは、シーケンスを計算するための重要なアルゴリズムについて説明しています。


あなたが述べたように、このシーケンスは負けたポジションを表しています。一定の時間でポジションが失われたかどうかを確認できたとしても(難しいようです!)問題は、最適な移動を返すように求めます。負けポジション。問題は煮詰めて、現在の状態から四角形を引くことにより、負けポジションを見つけることです。したがって、一定の時間内に位置が失われているかどうかを確認できたとしても、州よりも小さいすべての正方形を反復処理する必要があります。
マーティンコープス2017

3
右、それは十分ではありませんが、良いスタートになるでしょう。おそらく、ポジションの勝ちステータスのみを計算できることから、いくつかの洞察を得るでしょう。さらに、どのポジションが負けているかを判断するのが難しいことを示すことは、適切な決定バージョンで、述べられている問題がNPハードであることを示すのに十分です。
Yuval Filmus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.