自己列挙型パングラムに関するwikiの記事には、二分決定図を使用して計算されると記載されています。私はBDDについて読んでいますが、私の理解から、BDDを構築する前に、いくつかの問題をブール関数として表す必要があります。
どうすればこれを行うことができますか?
私はこの問題について数日間考えていましたが、単純なエンコーディングを使用してブール関数への入力を表すことができると確信しています。
10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
したがって、「16個のA、10個のB、11個のC、21個のD」で始まるパングラムの場合、10000010100101110101として表すことができます。
これは、文字の最大頻度を32回に制限すると仮定すると、ブール関数に26 * 5=130個の変数があることを意味します。
出力は、表現が自己列挙型のパングラムであるかどうか、つまり、文が独自の頻度のセットを記述している場合である必要があります。
これを行うには、ハッシュテーブル(または複数)が途中で必ず必要になります。
したがって、文字Eの場合、ハッシュテーブルは次のように始まります。
one -> 1
two -> 0
three -> 2
four -> 0
five -> 1
...
バイナリでは、次のようになります。
1 -> 1
10 -> 0
11 -> 10
100 -> 0
101 -> 1
Eハッシュテーブルからのすべてのルックアップの合計がEに対応する5つの入力ビットに等しい場合、自己列挙型パングラムのそのセクションは正しいです。すべてのセクションが正しい場合、ブール関数は1を生成し、そうでない場合は0を生成します。
ブール関数を使用して加算を実行する方法と、2つの数値が等しいかどうかを確認する方法を理解できると確信しています。ただし、ハッシュテーブルをブール関数として表すことからどこから始めればよいのかわかりません。また、すべてのピースを接続すると、私は戸惑う可能性があります。
何かご意見は?アイデア?コラボレーション?これがどこに行くのか見たいです。
前もって感謝します。