興味深いアナグラムを見つける


31

言うと同じ長さの2つの文字列です。anagramming二つの文字列の全単射写像であるようそれぞれについて、。a1a2anb1b2bnp:[1n][1n]ai=bp(i)i

同じ文字列のペアに対して複数のアナグラムが存在する場合があります。例えば、場合 `abcab`と私たちが持っているとなど。a=b=cababp1[1,2,3,4,5][4,5,1,2,3]p2[1,2,3,4,5][2,5,1,4,3]

アナグラムのの重み は、2番目の文字列を取得するために再配置できるチャンクを取得するために最初の文字列で行う必要のあるカットの数であると言います。正式には、この値の数れる。すなわち、その時点の数であり、はないない、正確1.For例によって増加及び、なぜならカットチャンクに、一度と、及び切り込み4回、5つのチャンクに。w(p)pi[1n1]p(i)+1p(i+1)pw(p1)=1w(p2)=4p11234512345p212345

2つの文字列とアナグラムが存在するとします。次に、少なくとも1つのアナグラムの重みを最小にする必要があります。これが一番軽いとしましょう。(最も軽いアナグラムが複数ある場合があります。重みだけに興味があるので気にしません。)ab

質問

アナグラムが存在する2つの文字列が与えられたときに、2つの文字列の最も軽いアナグラムの正確な重みを効率的に生成するアルゴリズムが必要です。アルゴリズムが最も軽いアナグラムを生成する場合でも問題ありませんが、そうする必要はありません。

すべてのアナグラムを生成して重量を量るのは非常に簡単なことですが、多くのアナグラムが存在する可能性があるため、軽いアナグラムを直接検出する方法をお勧めします。


動機

この問題が興味深い理由は次のとおりです。コンピュータに辞書を検索させ、アナグラム、まったく同じ文字を含む単語のペアを見つけるのは非常に簡単です。しかし、作成されるアナグラムの多くは面白くありません。たとえば、Websterの第2国際辞書にある最長の例は次のとおりです。

胆嚢
十二指腸s造設

問題が明らかである:彼らは非常に軽いanagrammingを認めるため、これらの結果がおもしろくであることを単に交換cholecystoduedenoおよびstomyセクション、一方2.の重量のために、このはるかに短い例では、はるかに意外で面白いです:

海岸線
断面

ここで、最も軽いアナグラムの重みは8です。

この方法を使用して、興味深いアナグラム、つまりすべてのアナグラムの重みが高いアナグラムを見つけるプログラムがあります。しかし、これは、可能なすべてのアナグラムを生成して重み付けすることでこれを行いますが、これは遅いです。


好奇心から、アナグラムのペアをどのように見つけますか?同じ長さのすべての単語内でブルートフォース検索を実行しますか?O(n2)
ペドロ

4
いいえ、もちろんありません。各単語を、アルファベット順に同じ文字を持つ標準形式に変換します。(たとえば、の正規形はcholecystoduodenostomyですccddeehlmnooooossttuyy。)2つの単語がアナグラムであるのは、それらが同じ正規形を持っている場合だけです。正規形式でキー付けされたハッシュテーブルに単語を保存し、衝突を見つけるたびにアナグラムを取得します。
マークドミナス

私のブログにはこれに関する多かれ少なかれ関連情報があります:(α) (β) (γ) (δ)
マーク・ドミナス

回答:


21

この問題は、「最小共通文字列パーティション問題」として知られています(より正確には、最小共通文字列パーティション問題の答えは、問題の答えに1を加えたものと等しくなります。)残念ながら、 Goldstein、Kilman、およびZheng [GKZ05]によって証明されているように、各文字は各入力文字列で最大2回出現します。これは、P = NPでない限り、多項式時間アルゴリズムが存在しないことを意味します。(もちろん、各文字が1回しか出現しない場合、アナグラムは1つしかないため、問題は簡単です。)

良い面として、同じ著者[GKZ05]は、同じ制限の下で多項式時間1.1037近似アルゴリズムを提供します。(A「1.1037- 近似アルゴリズムが」わけではない出力正解アルゴリズム意味Aしかし、出力に値が保証されているBようにAB ≤1.1037 Aを。)また、下線形時間4 -近似アルゴリズムを与えます各入力文字列で各文字が最大3回発生するというより弱い制限。

[GKZ05] Avraham Goldstein、Petr Kolman、およびJie Zheng。最小の一般的な文字列パーティションの問題:硬度と近似。 Electronic Journal of Combinatorics、12、2005年R50の記事、 http://www.combinatorics.org/ojs/index.php/eljc/article/view/v12i1r50



9

これは、上記の伊藤剛の回答のフォローアップであり、彼が引用したGKZ05論文の最も重要な部分を要約しています。

この論文は、Maximal Independent Set(MIS)問題の軽減を証明しています。およびとなるような頂点がペアであるグラフをします。アナグラムがおよびおよびすべてをマッピングすることが不可能な場合はいつでも頂点および()をエッジに接続しますと。これは簡単に検出できます。次のいずれかが当てはまる場合、そのようなマッピングは正確に不可能です。G(i,j)ai=bjai+1=bj+1(i,j)(k,)ikiji+1j+1kk+1+1

  1. i=kおよびj
  2. i+1=kおよびj+1
  3. i+1<kおよびは{j,j+1}{,+1}

結果のグラフは、サイズ最大独立セットがあるとします。その場合、最小アナグラムの重みは正確に。ここで、は文字列と長さです。(逆も成り立ちます。軽量のアナグラムは、大きなMISに直接変換されます。詳細については、論文の4〜5ページを参照してください。)Gsns1nabG

たとえば、2つの文字列yttriousとを考えますtouristy。対応するグラフには、共有ouペア用と共有ペア用の2つの頂点がありriます。両方のマッピングしanagramming持つことが可能であるため、頂点間のエッジは、存在しないououしてriにしri、または、3つの条件がすべて失敗することを確認できます。グラフは明らかにサイズのMIS持つように及び最小anagramming重量anagrammingに対応し、実際8-2-1 = 5である↔ 。」s=2y|t|t|ri|ou|st|ou|ri|s|t|y

一方、とを検討deraterしてくださいtreader。今回は、グラフに3つの頂点があります。

  1. DErater + treaDEr
  2. dERater + treadER
  3. deratER + treadER

2と3は互換性がなく、1と3は互換性がありませんが、1と2は互換性があります。したがって、一意のMISのサイズは、頂点1と2が含まれます。重み7-2-1 = 4の対応するアナグラムは↔ です。s=2der|a|t|e|rt|r|e|a|der


2
フォローアップの投稿をありがとうございますが、これは問題のNP完全性の証拠ではありません。問題のNP完全性を証明するには、既知のNP完全問題を問題に還元する必要があります。これは[GKZ05]の定理2.2です。ここで提示したのは([GKZ05]の補題1.1)、反対方向の減少です。
伊藤剛

これは素晴らしい再定式化です。(少なくとも私にとって)概念的には小さな単純化である些細な変更:互換性のないペア間でエッジを描画し、最大の独立セットを要求する代わりに、互換性のあるペア間でエッジを描画し、最大クリークを要求できます。(「一緒に保持できるペアの最大数はどれくらいか」について考える方が簡単だと思います。)
ShreevatsaR

2

それはあなたが念頭に置いていた正確なアルゴリズムをカバーしていません(伊藤剛の答えはそうしています)が、「興味深い」アナグラムを見つけるという根本的な問題に取り組もうとしています...

私が最初に考えたのは、編集距離のバリエーションを使用することで、通常の「難易度」や「混乱」の重みではなく、「興味」に応じて原子の変化が重み付けされます。もちろん、この方法で本当に興味深い変換を効率的にエンコードできる可能性は低いようです。なぜなら、それらは非ローカルであり、したがってMISなどのNP完全な問題に遭遇する可能性が高いからです。

そのため、2番目の考えは、単語間の文字間アライメント(機械翻訳アライメントなど)を構築し、「面白さ」についてアライメント自体をスコアリングすることです(たとえば、隣接する文字を隣接する文字、または各アラインメントが交差するアラインメントの数など;そして、それらをすべて対数線形モデルなどを介して結合します。

3番目のアイデアは、アナグラム自体の構造を見ることを完全に放棄し、代わりに単語のセマンティクスを見ることです。多くの場合、アナグラムを「興味深い」ものにしているのは、関係する単語の意味の不一致です。WordNetで距離を計算するなどの方法を試してください。


0

問題は順列グループに関して言い表すことができます。

現在、順列グループには、すべての「アナグラムの動き」、プリミティブ(2文字のスワップ)およびプリミティブの動きのシーケンスの複合の両方が含まれています。可能な順列のサブセットのみに興味があるようです。これらを定義しようとします。

まず、順列の表記法、つまり、いわゆるサイクル表記法を思い出してください。

  • ()は順列なしを意味します。
  • (1)は、1が1と交換されることを意味し、これも順列ではありません。
  • (12) 1と2が交換されたことを意味します。
  • (123)は、1を置き換える3を置き換える2を1に置き換えることを意味します(回転)。
  • それで

これらの単純な「サイクル」は、より複雑な順列を記述するように構成されています。

興味のある動きは次のようです(長さ単語の):n

  • 単一文字のペアのスワップ:これらはなどのスワップです(12)
  • 2つの連続した文字のペアのスワップ:これらはの形式の順列です。ここでおよびおよび> 0 、B < + 1 、B + 1 N(a b)(a+1 b+1)a>0b<a+1b+1n
  • ...
  • n個の連続した文字のペアのスワップ:これらはの形式の順列です 。ここで、、および。> 0 + I - 1 B B + I - 1つのN(a b)(a+1 b+1)(a+i1 b+i1)a>0a+i1bb+i1n

これらの動きは、アルゴリズムの基礎を形成します。あなたが興味を持っているのは、ある単語から次の単語に移動するこれらの動きの最小のシーケンスを見つけることです。

これを計算するためのアルゴリズムは、ブルートフォース検索以外には知りませんが、少なくとも今は、原始的な動きが何であるかについてのより明確な(希望)説明があります。(そしておそらく私たちの中のいくつかのグループ理論家は適切なアルゴリズムを指すことができます。)


1
ありがとう。恐らく私は悲観的ですが、このアプローチは難しいと思われます。グループ順列のアプローチは、どの置換グループが重要であるかを最初に見つけない限り、成果をもたらすとは思わず、それは入力文字列によって異なります。有限群の効率的な表現は、非常に深く豊かな問題だと思います。しかし、私は誤解されたいです。
マークドミナス

1
「あなたが興味を持っているのは、ある単語から次の単語に移動するこれらの動きの最小のシーケンスを見つけることです。」これは正しいとは思いません。たとえば、n = 4の場合、スワップ(1 2)の重みは2ですが、スワップ(2 3)の重みは3です。カウント方法ではこれら2つを区別しません。
伊藤剛

夜遅くに答えました。体重測定が正しく理解できませんでした。実際、私は今それを理解していません。私はあなたが文字のブロックの移動を許可したかったのですが、それが私がこれらのプリミティブを定義するすべての問題に取り組んだ理由です。私の答えはインスピレーションを与えるかもしれないので、たとえ間違っていてもそれを残します。
デイブクラーク

0

胆嚢十二指腸s造設術/十二指腸胆嚢ost造設術の場合、デルタとしてどれだけ動かしたかを示す数字を各キャラクターに割り当てた場合、7 7、8 -7、6 0のようなものがあることに気づきます。いくつかの文字が繰り返された可能性があるため(2番目のcは7だけでなく2だけ前方に移動したなど)、正しくありませんが、同じデルタが連続して表示されるため、非常に「ランレングスエンコード可能」です。

(+2)(+ 5)(+ 5)(-3)(-1)(+ 3)のようなものが見える海岸線/セクションと比較してください。

おそらく、デルタのランダム性は、アナグラムがどれほど興味深いかについて「スコア」を与えることができますか?

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