2016-06-19 1 views
1

私は何かしようとしていますが、自分のフィールド外です。説明すると、この例では、nがパラメータの総数であるものを簡略化するためにset n = 3となります:A、B、CこれらのパラメータはONとOFF(別名0または1)の状態を持つことができます。 これらのパラメータの組み合わせの総数は2^N =として視覚化することができ、この場合に8:もちろんアルゴリズムを使って2^nの組み合わせをインデックスすることができるので、配列を使わずに1から2までのインデックス値からバックトラックすることができます

ABC 
1: 000 
2: 111 
3: 100 
4: 010 
5: 001 
6: 110 
7: 011 
8: 101 

上記リストは(2^N)でソートすることができます! = 40320通り。 私は、1から2^nまでの数字が与えられた私のパラメータ(0または1)の状態を計算できるようにアルゴリズムが必要です。たとえば、上記の表を使用して3の数がある場合、私はAの状態が1で、BとCが0であることを知っています。もちろん、特定のソートを考慮してテーブル/配列を探すことはできますが、 nの値には巨大なテーブルが必要です。

私はこれに慣れていませんし、インデックス作成を行う方法もあります。そのため、私は助けが必要です。

種類について

+3

上記の正確な注文が必要ない場合は、バイナリでカウントしています。 – melpomene

+0

具体的な答えがわかりませんが、おそらく "並べ替えの列挙"に関連するものを探してください。特定の順列(https://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations)を生成および/または呼び出すための方法はかなりありますが、あなたが望むことを実行するためのより多くの手順があります。 – viraptor

+0

私は必要ありません正確なリスト、私は道が欲しいので、インデックス付けの一貫性のあるメソッドを必要とする1〜2^nの任意の値の任意のパラメータの状態を計算することができます。私はこれを調べますが、私はコンピュータプログラマーでも電気/電子技術者でもないので、どんな情報でも感謝します。 – TnF

答えて

0

実際に別の方法で見ることができます。あなたが望むのは、Nビットを別のNビットのセットに暗号化する関数です。実際にはformat preserving encryptionと同じです。すべて2^n例が覆われている

  • 、または近い2^nにちょうど十分な大きさの数は、あなたがこれをしたい
  • (あなたは右の暗号化/ハッシュ方式を選択する必要があります):質問は、あなたがいるかどうか気にしませんさ一方向または双方向(つまり、あなたはこれまでに尋ねたいことがありますか?私はこの番号に対応する番号を持っていますが、これは私が使用している順列です)

答えが両方でない場合は、 FPEアルゴリズムでは、テーブル全体を生成する必要はありません。

+0

返信いただきありがとうございますが、私はあなたが問題を誤解したと思います。私がここで達成しようとしていることを説明するのは本当に難しいでしょうが、バイナリカウンティングは私のケースにとって非常に良い解決策です。なぜなら、生成される組み合わせの配列は常に同じであり、各パラメータを2進数の特定の桁に割り当てることによって、各パラメータの状態。上記の例では、最初の桁をA、2番目のBなどに設定すると、任意の2^n-1の10進数に対して、任意のnの一意のn桁のバイナリが得られます。 – TnF

0

finding all subsets of a given set using bitmaskという別の問題があります。あなたはあなたのケースで同じ概念を使うことができます。このlinkには良いチュートリアルが含まれています。

+0

はい、私の問題であるインデックス作成だけです。セットを生成しません。ニースリンクは、メルフェモネとして記載されているバイナリカウントは、私の問題の解決策です:) – TnF

関連する問題