文字列のシャッフル解除はどれくらい難しいですか?


117

2つの文字列のシャッフルは、文字列を散在させて新しい文字列にし、各文字列の文字を順番に並べることによって形成されます。例えば、MISSISSIPPIのシャッフルであるMISIPPSSISI。2つの同一の文字列のシャッフルである場合、文字列の正方形を呼び出します。例えば、ABCABDCDそれはのシャッフルであるため、正方形であるABCDABCD、しかし、文字列はABCDDCBA、正方形ではありません。

文字列が正方形か、NP困難かを判断するための高速アルゴリズムはありますか?明らかな動的プログラミングのアプローチはうまくいかないようです。

次の特殊なケースでさえ難しいようです:(1)各文字が最大46回現れる文字列、および(2)2つの異なる文字のみを含む文字列。 Per Austrinが以下で指摘しているように、各キャラクターが最大4回出現する特殊なケースは2SATに減らすことができます。


更新: この問題には、硬度をより簡単に証明できる別の定式化があります。

頂点が1〜nの整数であるグラフGを考えます。エンドポイント間の実際の間隔で各エッジを識別します。Gの2つのエッジは、一方の間隔に他方が適切に含まれている場合にネストされると言います。たとえば、エッジ(1,5)と(2,3)はネストされていますが、(1,3)と(5,6)はネストされておらず、(1,5)と(2,8)はネストされていません。Gでの一致は、エッジペアがネストされていない場合ネストされませんGがネストされていない完全一致を持っているかどうかを判断する高速なアルゴリズムはありますか、それとも問題はNP困難ですか?

  • 文字列のシャッフル解除は、クリークの互いに素な結合(入れ子になっていない文字間のエッジを持つ)でネストされていない完全一致を見つけることと同じです。特に、バイナリ文字列のシャッフル解除は、2つのクリークの互いに素な結合でネストされていない完全一致を見つけることと同じです。しかし、この問題が一般的なグラフにとって難しいのか、グラフの興味深いクラスにとって簡単なのかさえ、私には分かりません。

  • 完全な非交差マッチングを見つける簡単な多項式時間アルゴリズムがあります。


更新(2013年6月24日):問題は解決しました! 現在、正方形の文字列を識別することがNP完全であるという2つの独立した証拠があります。

2009年のShuai Cheng LiとMing Liによる、ネストされていない完全一致の検索はNP困難であるというより単純な証拠もあります。「2間隔パターンの2つの未解決問題」、Theoretical Computer Science 410(24–25 ):2410–2423、2009。


2
シーケンスは、A000984、「ビットの半分がオンで半分がオフである2 * nビットの2進数の可能な値の数」ではありませんか?
トラビスブラウン

5
@Travis、誤解がない限り:n = 4の場合、10000111は2 * nビットの2進数で、ビットの半分はオンで半分はオフですが、定義されているように正方形ではありません。そのロジックに従って、正方形はA000984を生成するセットの厳密なサブセットであるため、バイナリアルファベット上の正方形の値は、シーケンス全体で等しいインデックスで低くなります。
ダニエルアポン

1
観察:グラフ形式を使用して、2nをGの頂点の数とするサイズnの独立したセット。最大の独立セットを多項式時間で計算できるグラフにはさまざまなクラスがあります。このルートに進むと、質問は次のとおりです。G 'にはどのような優れたプロパティがありますか? (詳細)
伊藤剛

2
@Radu:(バイナリアルファベットを超える)正方形の非正方形への割合が1/3に収束するとは思わない。1/2への収束が遅いことを示すモンテカルロシミュレーションをいくつか行いました。したがって、制限では、本質的に0と1の偶数を持つすべてのバイナリ文字列は正方形です。これは私にとって驚くべきことであり、アルゴリズムで悪用される可能性があります。大きなアルファベットの場合、平方の割合は急速に0に収束するようです。
マーティンバーガー

8
この質問は今日のブログ投稿で言及されているので、この問題を解決することに新たな関心が寄せられるかどうか見てみましょう。この質問が提起されてから1年が経ち、それ以来多くの新しいユーザーを獲得しています。私は質問に対して100人の報奨金を出しました。
アレックス10ブリンク

回答:


66

Michael Soltysと私は、文字列をスクエアシャッフルとして記述できるかどうかを判断する問題がNP完全であることを証明することに成功しました。これは、異なる記号を持つ有限のアルファベットにも当てはまりますが、記号を持つアルファベットに対して証明が書かれています。この質問は、小さいアルファベット、たとえばシンボルのみについては未解決です。各シンボルが回(または、より一般的には一定の回数)しか表示されないという制限の下で、問題を検討していません。その質問はまだ開かれています。9 2 67926

この証明では、パーティションからの縮小を使用しています。ここに投稿するには長すぎますが、次のWebページから「文字列のアンシャフリングは -hard」というプレプリントを入手できます。NP3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

そして

http://www.cas.mcmaster.ca/~soltys/#Papers

この論文はJournal of Computer System Sciencesに掲載されました。

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
驚くばかり!!(そして、私の計り知れない

15
ありがとう。StackExchangeがこの質問のソースでした。それは素晴らしいリソースです!
サム・ブス

9
@SamBussの小さなリクエスト:ジェフの質問を引用している間は、本文ではPer Austrinのソリューションのみに言及しています。回答を見ると、回答の正式な引用を生成する方法もあります(共有ボタンをクリックして、「引用」リンクをクリックします)。そのようにして、Perの答えに対しても適切な引用を生成できます。私はこれを言及するだけで、サイトで正式な貢献をした人も正式な承認を得ることができます。ありがとう!この問題をクラッキングおめでとう
スレシュヴェンカト

2
@sureshVenkat。ヒントをありがとう:これは便利です。これをオンライン版の論文に追加しました。
サム・ブス

正方形のシャッフルを認識する問題は、バイナリアルファベットでも困難であることが明らかになりました:sciencedirect.com/science/article/pii/S0304397519300258
a3nm

58

各文字が最大4回現れるときに言及する特別な場合については、次のように、2-SATに単純な削減があります(何かが足りない場合を除きます)。

重要な点は、文字ごとに、その文字の出現を一致させる(最大で)2つの有効な方法があることです(3番目の可能性は入れ子になります)。ブール変数を使用して、2つの一致のどちらが選択されるかを表します。これらの変数への割り当てにより、ネストされたエッジのペアごとに文字列の有効なシャッフル解除が行われ、両方が選択されたわけではありません。この条件は、関係する2つの文字に対応する変数の否定(おそらく否定)によって正確に説明できます。


いいね 同じ考えは、各文字が最大6回出現する文字列に一般化されますが、結果は5-SATのインスタンスです。:-(
ジェフ

2
この答えは、賞金を獲得するためのお気に入りです。
ジェフ

だから、これは問題がNPCであり、なぜ長い会議とジャーナルの証拠が必要なのかを証明しているように思えますか?
T ....

@Turbo多く遅ればせながら、これは2-SATがあるため、NPCをする問題を証明していないではない NPC。それはP.にだ
スティーブン・Stadnicki

アルファベットサイズに制限がない場合、この2-SATへの削減は機能しますか?
モハマドアルトルコ

11

証明するのは難しいように見えますが、家に賭けることはありませんが、正しい可能性があるアルゴリズムがあります...

GeGee

GGGG

>1

貪欲な選択の後、グラフを再度パージするなど、グラフが(できれば)ネストされていない完全一致になったときにプロセスが終了します。

最初は、これは貪欲なアルゴリズムで小さな先読みをするようなもので、実際には機能しないと思っていましたが、反例を思い付くのは驚くほど難しいことがわかりました。


私は、2番目の貪欲な段階については懐疑的ですが、グラフを削除すると便利なようです。グラフがクリークの互いに素な結合である元の文字列コンテキストでは、パージされたグラフの構造について何か言うことができますか?それはまだクリークのばらばらの結合ですか?(つまり、入力文字列内の各文字の出現を分割して、異なる部分の文字が一致しないようにすることはできますか?)
ジェフ

2
2番目の質問では、文字列「aaaa」を検討します。パージすると、エッジ1-4と2-3が削除され、4サイクルになります。2番目の貪欲なステップの2つのバリエーションも十分であり、反例は見つかりませんでした:1)パージされたグラフは、完全に一致する場合はネストされていない完全な一致があります(貪欲なステップとは比較にならないようです) 。2)ネストされていない完全一致のパージされたグラフでは、すべてのエッジがいくつかのネストされていない完全一致で使用されます(これは貪欲なステップと最初の項目の両方よりも強いため、反証しやすいはずです)。
オーストリンごと10

11

Sam Bussと私が2012年11月に提案したソリューション(3パーティションからの削減によってNPハードの正方形をシャッフル解除することを示す)は、Journal of Computer System Sciencesの公開記事になりました。

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
これは、Sam Bussの以前の回答の編集であり、個別の回答ではありません。[編集]をクリックして、他の人の回答に対する編集を提案できます。編集内容は、サイトの他のユーザーによってレビューされます。
DW

11

Romeo RizziとStéphaneVialetteは、最長バイナリサブシーケンス問題からの削減により、2013年の論文「シャッフル製品の正方形である単語の認識」で正方形文字列の認識がNP完全であることを証明しました。彼らは、バイナリ文字列をシャッフル解除する複雑さがまだ開いていると述べています。

ネストされていない完全一致の検索がNP完全であることのさらに簡単な証拠は、2009年の論文「2間隔パターンの2つの未解決問題」で、Shuai Cheng LiとMing Liによって示されています。ただし、バイオインフォマティクスから継承された用語を使用します。「完全な非ネスト一致」の代わりに、「DIS-2-IP-問題」と呼びます。2つの問題の等価性は、Blin、Fertin、およびVialetteによって説明されています{<,}

2-IP-ディス問題は、一般的なグラフに拘束マッチングの点で即時製剤がありますグラフを考えると共に線形順序付きの頂点、2-IP -DIS-問題は、2つの異なるエッジ およびのプロパティを持つに一致する最大カーディナリティを見つけることと同等です。どちら とまた{<,}GπG{<,}MG{u,v}{u,v}Mmin{π(u),π(v)}<min{π(u),π(v)}max{π(u),π(v)<max{π(u),π(v)}min{π(u),π(v)}<min{π(u),π(v)}およびが発生します。max{π(u),π(v)}<max{π(u),π(v)}

更新(2019年2月25日): BulteauとVialetteは、バイナリストリングのシャッフル解除の決定問題が論文でNP完全であること、バイナリシャッフル正方形の認識はNP-hardであることを示しました


接続が表示されず、文字列のシャッフル解除が問題と同等であると著者が主張している箇所も表示されません。
Suresh Venkat

2
彼らはそれがシャッフル解除に相当するとは言いません。より一般的な問題です。
ジェフ

@SureshVenkat私は自分の答えを編集しました。もっと明確にしたいと思います。基本的に、脚注で彼らが言っているのは、マッチング()の2つのエッジはネストされていないということです。M
モハマドアルトルコ

実際の公開バージョンでは、等価性は、ページ320に記載されてbooks.google.com/...
ムハンマド・アル・Turkistany


9

これは役立ちますか?

http://users.soe.ucsc.edu/~manfred/pubs/J1.pdf


7
素敵なリファレンス。結果が私の問題にどのように適用されるかを見るのは難しいですが、おそらくテクニックが役立つでしょう。これは、指定された文字列XがYで添付紙がそれを証明している別の与えられた文字列の2つのコピーのシャッフルがあるかどうかを言うのは簡単だと、指定された文字列Xがのシャッフルであるかどうかを決定するためにNP-難しいの任意の数の他の指定された文字列Yのコピー特定の文字列Xが
いくつかの不明な

5

決して気にしないでください、この回答は間違っています。入力 "AABAAB"で失敗します。最初の2つのAを互いに貪欲に一致させると、残りのシンボルを一致させることができなくなります。他の人が同じ間違いをしないように、削除するのではなく、そのままにしておきます。

想定される正方形の連続する各文字を、可能な限り早い位置にある別の等しい文字に貪欲に一致させることは常に安全であるように思えます。つまり、次の線形時間アルゴリズムが機能するはずです。

入力文字列の各位置iをループします。i= 0、1、2、... n。各位置iについて、その位置が文字列内の以前の位置とすでに一致しているかどうかを確認します。そうでない場合は、すでに一致した最後の位置の後にある等号文字と一致させ、それ以外の場合は文字列内で可能な限り早くします。一部の文字に一致するものが見つからない場合は、入力が正方形ではないことを宣言します。それ以外の場合は、各一致の最初のペアの文字のセットです。

これはPythonにあります:

def sqrt(S):
    一致= []
    i、j = 0、0
    一方、i <len(S):
        j <len(matches)and matches [j] [1] == i:
            i + = 1
            j + = 1
            持続する
        一致する場合:
            k =一致[-1] [1] + 1
        その他:
            k = 1
        一方、k <len(S)およびS [k]!= S [i]:
            k + = 1
        k> = len(S)の場合:
            例外を発生させます(「正方形ではありません」)
        matches.append((i、k))
        i + = 1
    return "" .join(一致するa、bのS [a])

印刷sqrt( "ABCABDCD")

ここで、iはメインループ変数(一致させようとしている位置)、jは位置iが既に一致しているかどうかのチェックを高速化する一致したペアの配列へのポインター、kは検索に使用されるインデックスです位置iの文字と一致する文字。i、j、およびkは文字列全体で単調に増加し、各内部ループの反復によりそれらの1つが増加するため、線形時間です。


4
行ったことがある。やった :
ジェフ

5

更新:ラベルが1からnまでの場合、非ネストおよび非交差である完全一致を見つけることの難しさについて話すのは意味がありません。(はい、自分自身を蹴っています。)しかし、ラベルの範囲が広い場合は意味があります...だから私はまだいくつかの希望を見ていますが、結局はまったく無意味かもしれません。私は確かにこれをさらにフォローアップする必要があります。


ネストされておら交差していないマッチングを見つけるのが難しい理由を考えることができます。このようなマッチングを、互いに素なマッチングと呼びます。これがどの程度役立つかはわかりませんが、とにかく理由を説明させてください。(ここでの私の主張は完全ではなく、省略した詳細はおそらく重要であることを指摘する必要があります。しかし、それは出発点であるかもしれないと思います。)

少し異なる問題から始めます。エッジが色で色付けされ、頂点にからまでのラベルが付けられたグラフが与えられた、各色のちょうど1つのエッジを含む互いに素なマッチングがありますか この問題はNP困難であるように見えます(これに対する議論は完全かつ簡単です-何かが足りない限り)。リダクションは、クリークの互いに素な結合であるグラフを吐き出します。Gk1n

この削減は、[1]で導入されたNP完全問題であるDisjoint Factorsによるものです。素因数分解のインスタンスは、サイズアルファベットの文字列で与えられます。問題は、素因数分解があるかどうかです。要素は、同じ文字で始まり、同じ文字で終わる部分文字列です。また、2つの要素が文字列内で重なっていない場合は互いに素です(特に、「ネスト」も許可されていないことに注意してください)。kk

Disjoint Factorsインスタンスに関連付けられたサイズのアルファベットの要素をで示してみましょう。a1,,akk

互いに素な因子のインスタンス、つまり長さ文字列が与えられた場合、頂点ラベルがからまでの個の頂点を持つグラフを作成します。対応する位置が同じ文字(たとえば)である場合、頂点と間にエッジを追加し、エッジを色で色付けします。nn1nuvai(u,v)i

削減の証明は基本的に定義から得られます。与えられたの互いに素な要因は、我々は明確に持っている互いに素な要因によって与えられるだけでエッジを選ぶ、-disjointカラフルなマッチングをし、結果のマッチングがカラフルで互いに素の両方であることを確認することは容易です。逆に、 -disjointカラフルなマッチングがある場合、マッチングはカラフルで(したがって、文字ごとに1つのファクターを選択する)、ディスジョイント(対応するファクターがオーバーラップしないため) )。kkk

色を取り除き、マッチングを完全にするために、おそらくより広い範囲で、こうして作成されたグラフに次の変更を加えます。

してみましょう文字に関連付けられた位置であるラベル持つ頂点のサブセット表す。場合有する頂点を、その後、追加新しい頂点との間の完全な二部グラフ誘導と新たに追加された頂点を。もちろん、すべての手紙について繰り返します。 a U a A A 2 U aUaaUaA(A2)Ua

大まかに言って、グラフが完全な一致を誘導する場合、新しく導入された頂点はの頂点と一致する必要があり、それらは頂点のペアを除いてすべて飽和し、残りの頂点間のエッジは素因数に対応します。私は、新しく追加された頂点に関連付ける必要のある数字を計算していません。結果の一致がばらばらになるようにする必要があることに注意してください。私はそれが「できる」という気持ちを持っています(読んでください:希望)!Ua

[1] 多項式カーネルのない問題について、Hans L. Bodlaender、Rodney G. Downey、Michael R. Fellows、Danny Hermelin、J。Comput。システム。科学


3
よくわかりません。(1,2)、(3,4)、(5,6)、...、(n-1、n)は完全に素なマッチングではありませんか?
ジェフ

「完全一致」シナリオに移行したら、構成を変更して、新しい頂点を多数追加します(アルファベットのaごとに| U_a | -2個の新しい頂点を追加することに注意してください)。したがって、nはそれに応じて爆発します-kサイズのアルファベットの場合、およそ2n-2kになります。新しい頂点に割り当てられる数値を指定していないため、削減が不完全であることを明確にしたいと思いますが、それほど困難なく拡張できることを期待しています。しかし、私がそれ以上何かを言う前に、私はそれについて確かに考えなければなりません。
ニールダラ

1
JeffEのコメントのポイントは、可能性が1つしかないため、非ネストおよび非交差である(またはその不在を報告する)完全一致を簡単に見つけることができると思います。
伊藤剛

2
私はあなたの証明のアイデアの内容について話しているわけではありませんが、あなたの答えの最初の文について話しているのです。このタスクは、JeffEが書いた理由により簡単です。
伊藤剛

2
素因数問題(各色の多くても1つのエッジ)によって課される色付けの制約がない場合、素因数の最大一致を見つけることも簡単です。
ジェフ

1

アプローチは機能しません。2つの一致する文字を取り出してシャッフルされた正方形を分解しても、シャッフルされた正方形にはなりません...以下のRaduのコメントを参照してください。


使用して提案の範囲連結文法を(RCGs、参照http://hal.inria.fr/inria-00073347/en/を):私は「Mは、次のような単純なRCGが有限の上に『正方形をシャッフル』の言語を認識するという印象の下にありましたアルファベット、Raduの最初のコメントの後に編集: ここでおよび範囲は空を示します文字列。S X 、Y Σ

S(XY)A(X,Y)(1)A(aX1,aX2Y1Y2)A(X1,Y1)A(X2,Y2)(2)A(ε,ε)ε(3)
aΣε

文法は、最初の単語の出現からの文字と2番目の単語の出現の同じ文字が一致することを2番目の述語でチェックします。次に、残りの最初の単語文字の残り、つまりを残りの部分文字列、つまりと照合する方法を推測します。したがって、前はすべて最初の単語インスタンスに属します。と呼び、始まるサフィックスに一致すると推測します。とには単語の両方のインスタンスからの文字が含まれている場合がありますが、とは最初のインスタンスからの文字のみが含まれていることに注意してください。X1Y1Y1X2Y2Y1Y2X1X2

たとえば、文字列派生物はです。 abcabdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(by 3)A(d,d)A(ε,ε)(by 3)A(ε,ε)A(ε,ε)A(ε,ε)(by 2)3εi.e. success

以下のための、 0011

S(0011)A(0,011)A(ε,ε)A(1,1)A(1,1)ε

さて、Boullierは、上記の文法があれば、あなたの質問に答えるRCGsための動的プログラミング多項式時間アルゴリズムが存在することが以前にリンクされた紙で示している正しかったです。考えとしては、変数、などのインスタンス化を文字列として上に示しましたが、これらは実際には入力文字列内の間隔であり、適切に集計できます。XY


する(0011)Sを取る導出あり?(1つある必要があります。)ϵ
ラドゥグリゴール

そうは思いません。
セルジュガスパー

また、A(10,011010)-> A(0,101)A(0,0)->ですが、10011010は正方形ではないと思います。ϵ
ラドゥグリゴー

返品をありがとう。私は文法を少し変更し、それが機能するかもしれないという小さな直感さえ持っています。
シルヴァン

3
どういたしまして。さらに、更新された文法については:) A(00,000110)-> A(0,011)A(0,0)->ですが、00000110は正方形ではありません。また、正方形である100110101010の派生はないようです。ϵ
ラドゥグリゴール

1

更新: 伊藤剛がコメントで指摘しているように、このアルゴリズムには指数関数的な実行時間があります。

元の投稿:

これを実際の世界でどのようにプログラムするかを以下に示します。

文字列S =(S [1]、...、S [n])が与えられます。各接頭辞S_r =(S [1]、...、S [r])には、文字列のペアのセット{(T_i、U_i)}があり、S_rは(T_i、U_i)のシャッフルです。 T_iはU_iのプレフィックスです(つまり、U_iはT_iで始まる)。このセットにT_i = U_iのペア(T_i、U_i)が含まれる場合にのみ、S_r自体は正方形です。

ここで、これらすべてのペアを生成する必要はありません。T_iのコピーを削除して取得した各文字列U_iのサフィックスV_iを生成するだけです。これにより、(指数関数的に)多数の無関係な重複が排除されます。このサフィックスのセットに空の文字列が含まれている場合にのみ、S_rは正方形になります。したがって、アルゴリズムは次のようになります。

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

たとえば、SがAABAABの場合:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

入力文字列の半分以上の長さのサフィックスをすべて破棄できるため、これは次のように単純化されます。

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

私はこれをC ++でプログラムしましたが、ここで示したすべての例で動作します。誰でも興味があれば、コードを投稿できます。問題は、SuffixSetのサイズが多項式よりも速く成長できるかどうかです。


3
私もこれを試しましたが、実験では、元の文字列が(AB)^ nである場合、SuffixSetのサイズがnで指数関数的に増加するように見えることが示されています。
伊藤剛

1

編集:これは間違った答えです。


シルベインは、残念ながらこれらの「シャッフルスクエア」には不適切なRCGを提案しました。ただし、次のように見えるものがあると思います(編集:RCGではなく、以下のカートのコメントを参照してください!)

S(Y)A(ϵ,Y)(1)A(X,ZY)A(XZ,Y)(2)A(aX,aY)A(X,Y) for every aΣ(3)A(ϵ,ϵ)ϵ(4)

説明:私たちはどこにでも文字列で表示することができ、シンボルと一致していることを思い出して、私たちが一致した後と、私たちは一致させることができと場合意味(線形優先順位を意味します)。考え方は、半分のプレフィックスを比較するために文字列を分割 することです。2つの部分文字列の先頭が一致する場合、問題を残りの文字列減らすことができます。そうでない場合は、右側の一部を左側に移動できますaabbabab(1,2)(3)(2)後の位置で一致するかどうかを確認します。重要なのは、これが一方向にのみ許可されていることです!

(SylvainのRCGの反例)の派生はです。100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

この文法が実際に「シャッフルスクエア」を正確にキャプチャしているという正式な証拠は作成していませんが、それほど難しくないはずです。Sylvainは、RCGの決定問題は多項式であると既に述べました。


私は、これはおそらく多項式時間で実施することができる方法を見ていない:あなたは000102030から始めるなら、あなたは到達することができますためのx 、次のいずれかに等しい列123、01230、01203、 0012030、01023、0010230、0010203、000102030。(はい、シルヴァンによってリンクされたドキュメントを見ましたが、私にはすべてフランス語に見えます。)2 3A(x,ϵ)23
ラドゥグリゴール

5
@DaniCL、考え直して...プロダクションルールのRHSのパラメーターは、入力の連続した範囲である必要がありますか?Boullier論文の定義で明示的に述べられていることは見ませんでしたが、それがどのように使用されているようです。解析アルゴリズムの実行時間の分析では、句の可能な引数の数はO(n ^ 2h)であり、hは句の最大アリティ、nは入力長であると述べています。文法では、XZは一般的に元の入力では連続していません。
カート

3
@カート、あなたは欠陥を見つけたと思います。別の論文(「中国の数字、MIX、スクランブル、および範囲連結文法」)で、Boulierは次のように明示しています。「もちろん、連続した範囲のみを新しい範囲に連結できます。置換メカニズムによって範囲にバインドされることになっています。」これはおそらく、私の文法が有効なRCGではないこと、Raduの疑いは合理的であり、このアプローチも機能しないことを意味します。
DaniCL

2
@Kurtは正しいです。連続性の制限がなければ、NP完全言語のUNARY 3PARTITIONを認識する一連のプロダクションルールを作成できると確信しています。負でない整数のセットは、言語(1 * 0)^ *の文字列によって単項でエンコードできます。UNARY 3PARTITIONは、エンコードされたセットを3つの要素のサブセットにパーティション分割できる、すべて同じ文字列のセットです。(en.wikipedia.org/wiki/3-partition_problemを参照してください。)
ジェフ

1
単項3分割の文法:S(X0Y0Z)-> A(e、X0、Y0、Z); A(W、1X、Y、Z)、A(W、X、1Y、Z)、A(W、X、Y、1Z)-> A(W1、X、Y、Z); A(W、0X、0Y、0Z)-> B(W、XYZ); B(W、e)-> e; B(W、X0Y0Z)-> C(W、W、X0、Y0、Z); C(W、1V、1X、Y、Z)、C(W、1V、X、1Y、Z)、C(W、1V、X、Y、1Z)-> C(W、V、X、Y、 Z); C(W、e、X、Y、Z)-> B(W、XYZ)
ラドゥグリゴール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.