7


2

この質問は純粋に好奇心から外れています。 私は夏の間学校を卒業していて、これを解決するためのアルゴリズムを実装して楽しんでいました。 それは上記の質問につながりました、この問題はどれくらい難しいですか?

問題は、正の整数のリスト、一連の数学演算子、そして等号(=)が与えられることです。 整数(同じ順序で)と演算子(何度でも)を使って有効な数式を作成できますか。

例は質問を明確にするでしょう:

与えられた:\ {2、3、5、25}、\ {、 - 、*、/}、\ {=}出力:YES

式(私が思うのは1つだけ)は(2 3)* 5 = 25です。 YES / NOを出力するだけです。

問題はNPにあると思います。 私はこれが決定問題だから(はい/いいえ答え)、私はそれを決定する非決定論的多項式アルゴリズムを見つけることができますのでこれを言います。

{空} 整数間に配置する一連の演算子を非決定論的に選択します。 b。 あなたが答えることが有効な数学的表現であることを確かめる(これは一定の時間内に行うことができる)。

この場合、大きな問題はこれです:問題はPにありますか? (すなわち それを決定する決定論的多項式アルゴリズムはありますか?)または問題NPは完全ですか? (すなわち 既知のNP完全問題はこれに帰着できますか? または同等に、すべてのNP言語がこの問題に対して多義的な時間短縮可能なのか?)またはどちらでもないか? (すなわち NPに問題はあるがNPに問題はない)

注:この問題ステートメントは、PがNPと等しくないと仮定しています。 また、私はStack Overflowに慣れていませんが、私は宿題タグに精通しています。 これは実に単なる好奇心であり、宿題ではありません:)

7 Answer


6


http://en.wikipedia.org/wiki/Partition_problem[Partition problem](NP-Complete)からの直接的な簡約 -  N個の整数Sの集合を考えると、 "Valid Math"問題への入力は - S、N-2の演算子の要素と '='記号。


2


さて、最初に、あなたは整数の "集合"を指定しますが、集合は定義上無秩序であるので、あなたは整数の "リスト"を意味します。

また、ここでは間違っている可能性があると仮定します。つまり、=記号は常に、リストの2番目から最後までと最後の整数の間に1回だけ現れるということです。 途中で等号を許可すると、より複雑になります。

これが "Valid Mathematical Expression"(VME)がNP完全であるという実際の証明です。 http://en.wikipedia.org/wiki/Subset_sum_problem [Subset sum]から縮小できます。 Wikipediaのサブセット合計の定義では、サブセットが空でないことが必要であることに注意してください。 実際、空のサブセットを許容するサブセット合計のより一般的な問題は、目的の合計も入力の一部である場合、NP完全であることは事実です。 要求されない限り、私はその証明をしません。 サブセット合計 `+ {i_1、i_2、…​、i_n} `のインスタンスと希望する合計 ` s +`を指定して、次のVMEのインスタンスを作成します。

{0, i_1, 0, i_2, 0, ..., i_n, s}, {+, *}, {=}

部分集合sumのインスタンスが解決可能であれば、0になる整数の部分集合が存在します。 整数 `+ i1 `が合計の一部である場合、それに対応するゼロ(すぐ左)を追加し、 ` i1 +`が合計の一部ではない場合、それを乗算します。 各ゼロと右側の用語の間に、加算記号を挿入します。

ウィキペディアの例を取る

{−7, −3, −2, 5, 8}

ここで、 `+ {−3、−2、5} +`の合計は0であり、次のようにエンコードします。

{0, -7, 0, -3, 0, -2, 0, 5, 0, 8, 0}

結果の式は次のようになります。

{0*7 + 0 + -3 + 0 + -2 + 0 + 5 + 0*8 = 0}

今度は、VMEのこのインスタンスに対する解決策がサブセットsumのインスタンスに対する解決策になることを示す必要もあります。 これはあなたが思うより簡単です。 結果の式を見てみると、数を0で乗算されたもの(連鎖乗算の一部として含む)とそうでないものにグループ化できます。 ゼロを乗じた数値は、最終的な合計には含まれません。 ゼロを乗じていない数値は、最終的な合計に加算する必要があります。

そのため、VMEのこのインスタンスはIFで解決可能であり、サブセットのsumの対応するインスタンスが解決可能である場合に限り、減少が完了することを示しました。

*編集:*パーティション縮小(コメント付き)も同様に機能し、等号をどこにでも配置できるのでより優れています。 きちんと!


2


NP完全性をチェックする方法については、ある種の混乱があるようです。 NP完全問題は、特定の意味では、NPの他の問題と少なくとも同じくらい困難です。 いくつかのポスターがやろうとしているように、私たちが3SATと比較していたとしましょう。

さて、与えられた問題を3SATに減らすことは何も証明しません。 3SATを効率的に解くことができれば(P = NPを意味する)、与えられた問題を効率的に解くことができます。 しかし、与えられた問題が効率的に解決されるとすれば、おそらくそれは3SATの簡単な特殊なケースにのみ該当します。

与えられた問題に3SATを減らす必要があります。 これは、与えられた問題の解が3SAT問題の解決方法を教えてくれるように、任意の3SAT問題を与えられた問題の例に変換するための規則を作り上げる必要があることを意味します。 これは、3SATが与えられた問題よりも困難ではないことを意味します。 3SATは可能な限り最も難しいので、与えられた問題もまた可能な限り最も難しいものでなければなりません。

パーティション問題からの減少は機能します。 その問題は次のように動作します。整数の多重集合Sが与えられると、それらの間にSの各要素を含む2つの互いに素な部分集合に分割して、互いに素な部分集合の合計が等しくなるようにできますか。

これを行うには、Sの各要素を含み、その後0を含む、0から始まるシーケンスを構築します。 操作セットとして\ {、 - }を使用します。 つまり、Sの各要素は合計で0になるように加算または減算されます。つまり、加算された要素の合計は、減算された要素の合計と同じになります。

したがって、与えられたものを解くことができれば例のパーティションプログラムを解くことができ、したがってNP完全であるので、この問題は少なくともパーティション問題と同じくらい難しい。


1


今のところ完全な回答を得る時間はありませんが、この問題から Knapsack問題への縮小を説明することができます。

動的計画法を使用すると、*擬似多項式*時間解を得ることができます。 これは問題が確かにNP完了であるという事実と矛盾しないことに注意してください。


1


それがNP完全であるために満たされる必要がある2つの特性があります。

以下の場合、決定問題CはNP完全です。

  1. CはNPにあり、

  2. NPのすべての問題は多項式時間でCに帰着可能です。

1を制定しました。 2は、NPのすべての問題が3SATに帰着可能であり、3SATが現在の問題に帰着可能であるという事実から生じる。

従ってそれはNP完全です。

(編集)以下のコメントに答えてください:

私はSATが現在の問題に帰着可能であることを証明します、そして3SATがSATに帰着可能であるので、結果は以下の通りです。

入力式は次の式の接続です。

(x〜1〜V x〜2〜V x〜3〜V …​ x〜n〜V y〜1〜)

(x〜1〜V x〜2〜V x〜3〜V …​ x〜n〜V y〜2〜)

(x〜1〜V x〜2〜V x〜3〜V …​ x〜n〜V y〜3〜)

.

.

.

(x〜1〜V x〜2〜V x〜3〜V …​ x〜n〜V y〜64〜)

ここで、各y〜i〜は、すべてのx〜iの間に適用される演算子の順序が何であるかに基づくブール値です。 すなわち、y - i - は合計4×4×4×4×1の値をとることができます(、 - 、x、/のみが演算子で、=が常に最後の演算子であると仮定

式のどれもが真でない場合、完全な式はFALSEと評価され、すべての可能な値、すなわちnの数としてx〜1〜x〜n〜とy〜1を代入しない限りチェックする方法はありません。演算子を適用することができるさまざまな方法として〜y〜64〜(これは順序を大事にします)

この変換はPOLY時間で行われ、数式が有効であれば、与えられたブール式は充足可能です。

誰かが欠陥に気づいた?


0


これは本当にあなたの複雑さの質問に対する答えではありませんが、あなたの問題は Countdown問題のように聞こえます。 ちょっとした検索でこの論文は明らかになりました。http://www.cs.nott.ac.uk/~gmh/countdown.pdf


0


現時点で証明を立てるために時間を費やす必要はありませんが、パンチはそれがPにはないかもしれないことを私に告げます あなたは算術のための文法を定義することができます、そしてこの質問はこれらすべての端末を使う有効な構文解析木があるかどうか調べることになります。 その問題はNPにあるがPの外側にあると私は信じています。