5
興味深いアナグラムを見つける
言うと同じ長さの2つの文字列です。anagramming二つの文字列の全単射写像であるようそれぞれについて、。a1a2…ana1a2…ana_1a_2\ldots a_nb1b2…bnb1b2…bnb_1b_2\ldots b_np:[1…n]→[1…n]p:[1…n]→[1…n]p:[1\ldots n]\to[1\ldots n]ai=bp(i)ai=bp(i)a_i = b_{p(i)}iii 同じ文字列のペアに対して複数のアナグラムが存在する場合があります。例えば、場合 `abcab`と私たちが持っているとなど。a=a=a=b=b=b=cababp1[1,2,3,4,5]→[4,5,1,2,3]p1[1,2,3,4,5]→[4,5,1,2,3]p_1[1,2,3,4,5]\to[4,5,1,2,3]p2[1,2,3,4,5]→[2,5,1,4,3]p2[1,2,3,4,5]→[2,5,1,4,3]p_2[1,2,3,4,5] \to [2,5,1,4,3] アナグラムのの重み は、2番目の文字列を取得するために再配置できるチャンクを取得するために最初の文字列で行う必要のあるカットの数であると言います。正式には、この値の数れる。すなわち、その時点の数であり、はないない、正確1.For例によって増加及び、なぜならカットチャンクに、一度と、及び切り込み4回、5つのチャンクに。w(p)w(p)w(p)pppi∈[1…n−1]i∈[1…n−1]i\in[1\ldots n-1]p(i)+1≠p(i+1)p(i)+1≠p(i+1)p(i)+1\ne p(i+1)pppw(p1)=1w(p1)=1w(p_1) = 1w(p2)=4w(p2)=4w(p_2) = 4p1p1p_11234512345p2p2p_212345 2つの文字列とアナグラムが存在するとします。次に、少なくとも1つのアナグラムの重みを最小にする必要があります。これが一番軽いとしましょう。(最も軽いアナグラムが複数ある場合があります。重みだけに興味があるので気にしません。)aaabbb 質問 アナグラムが存在する2つの文字列が与えられたときに、2つの文字列の最も軽いアナグラムの正確な重みを効率的に生成するアルゴリズムが必要です。アルゴリズムが最も軽いアナグラムを生成する場合でも問題ありませんが、そうする必要はありません。 すべてのアナグラムを生成して重量を量るのは非常に簡単なことですが、多くのアナグラムが存在する可能性があるため、軽いアナグラムを直接検出する方法をお勧めします。 動機 この問題が興味深い理由は次のとおりです。コンピュータに辞書を検索させ、アナグラム、まったく同じ文字を含む単語のペアを見つけるのは非常に簡単です。しかし、作成されるアナグラムの多くは面白くありません。たとえば、Websterの第2国際辞書にある最長の例は次のとおりです。 胆嚢 十二指腸s造設 問題が明らかである:彼らは非常に軽いanagrammingを認めるため、これらの結果がおもしろくであることを単に交換cholecysto、duedenoおよびstomyセクション、一方2.の重量のために、このはるかに短い例では、はるかに意外で面白いです: 海岸線 断面 ここで、最も軽いアナグラムの重みは8です。 この方法を使用して、興味深いアナグラム、つまりすべてのアナグラムの重みが高いアナグラムを見つけるプログラムがあります。しかし、これは、可能なすべてのアナグラムを生成して重み付けすることでこれを行いますが、これは遅いです。