1

長さ n の配列が与えられた場合、配列の辞書式インデックス (ゼロからのインデックス) を出力する必要があります。辞書式インデックスは基本的に、元の配列のすべての可能な順列を含むスーパー配列に配置された場合に、指定された配列が持つ位置です。

これはそれほど難しいことではありません(Unique Element Permutations)が、私の問題は同じアルゴリズムを作成することですが、同じ要素の重複を含む配列に対してです。

以下は、小さな配列の可能な順列のいくつかと、それぞれの予想される戻り値を示すグラフの例です。

[0 1 1 2 2]->0
[0 1 2 1 2]->1
[0 1 2 2 1]->2
[0 2 1 1 2]->3
[0 2 1 2 1]->4
[0 2 2 1 1]->5
[1 0 1 2 2]->6
[1 0 2 1 2]->7
[1 0 2 2 1]->8
[1 1 0 2 2]->9
[1 1 2 0 2]->10
[1 1 2 2 0]->11
..
[2 2 1 0 1]->28
[2 2 1 1 0]->29

最も重要なことは、問題を解決するために他の順列を生成せずにこれを実行したいということです (たとえば、指定された順列よりも少ないすべての順列を生成したくありません)。

疑似コードを探しています。概念を理解できる限り、特定の言語は必要ありません。疑似コードを使わない計算原理でもいいです。

私は似たようなことを行ういくつかの実装を見てきましたが、バイナリ文字列 (2 つの異なるタイプの要素のみを含む) を対象としており、それらは二項係数を使用して仕事を完了させていました。うまくいけば、それは役に立ちます。

4

0 に答える 0