2

次のようなシーケンスが与えられた場合:

1,2,1,2,1,1,1,2,1,2,1,3,1,2,1,2,1,3

最小順序を取得する効率的な方法は次のとおりです。

1,1,1,2,1,2,1,3,1,2,1,2,1,3,1,2,1,2

ブルート フォース アプローチは明らかなので、推奨しないでください。ブルート フォース アプローチがそれを行う唯一の方法であるという説得力のある証拠を提供する場合を除きます。

もっと詳しく

数値のリストを生成するアルゴリズムがあります。アルゴリズムの出力はリスト/配列ですが、論理的には数値はループを表し、要素の相対的な順序のみが重要です。後で比較するためにこれらのループを保存するために、保存された数値の 1 次元リストがループ内の要素の最小順序を表すような方法でそれらを保存したいと考えています。写真が最も役に立ちます。

ループ

このループは、T tetromino の周りのパスを記述します。ここで、1 は前進、2 は右折、3 は左折です。どこから始めても、どちらの方向に進んでも、この一連の 18 の動きに従うと、T テトロミノが得られます。このループを生成するアルゴリズムの出力は、任意の開始点と方向を持つ要素を返します。したがって、返される配列は次のようになります。

任意の初期順序:

1,2,1,2,1,1,1,2,1,2,1,3,1,2,1,2,1,3

任意の順序

ただし、最小注文が 1 つあります。T テトロミノが対称であるという事実を反映して、2 つの異なる回路から取得できます。

最小注文:

1,1,1,2,1,2,1,3,1,2,1,2,1,3,1,2,1,2

最小注文

強引な

明白な力ずくの方法は、すべての可能な順序を構築し、最小にすることです。私の質問は、これを行うためのより巧妙で効率的な方法があるかどうかです。

4

1 に答える 1

4

これは、辞書式順序で最小の文字列回転と呼ばれるよく研究された問題です。

ナイーブアルゴリズムのO(n * n)とは対照的に、より優れたアルゴリズムはすべてO(n)時間で実行されます。

于 2012-08-18T16:34:18.637 に答える