7

自己列挙型パングラムに関する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つの数値が等しいかどうかを確認する方法を理解できると確信しています。ただし、ハッシュテーブルをブール関数として表すことからどこから始めればよいのかわかりません。また、すべてのピースを接続すると、私は戸惑う可能性があります。

何かご意見は?アイデア?コラボレーション?これがどこに行くのか見たいです。

前もって感謝します。

4

1 に答える 1

1

私の見方では、この文脈で使用されるBDDの使用は、たとえば、文が自己列挙型パングラムであるための要件を満たしているかどうかを評価するために使用される式を表現し、操作するのを支援する方法にすぎません。ブール代数でステートメントを操作する場合よりも概念的に簡単な方法でそれらを操作するためのルールがあります。これは、ブール代数の多項式を処理するのが難しいのと同じように、ブールの表記よりもその表記で表現するのが簡単だからです。それがどこから来たのかなどを表す他の表記法よりも一般的な形式で。これら4つのいずれかを操作するためのコンピューターアルゴリズムが存在するため、おそらく1つを調べて、ニーズに合わせて調整するのが最善の選択肢です。このドキュメントが役立つ場合があります。

Googleは、追加のリソースを見つけるのにも役立つ場合があります。

于 2012-09-14T21:22:27.903 に答える