-1

テーブル全体を作成せずに、真理値表の行を生成することを考えている人は誰でもいます。たとえば、ユーザーが行番号を入力すると、その真理値表の行が生成されます。また、これは、その行番号に到達するまでテーブルを作成せずに行う必要があります。基本的に、入力として真理値表の行のみに基づいて真理値行の値を計算する効率的な方法があるかどうかを知りたいです。

例: 3 つの変数 printTruthTableRow(3) が 010 を生成すると仮定します。

実際、input-1 をバイナリ値に変換して、その真理値表の行を取得できますか?

編集:もう少し背景を教えてください。Java で基本的な DPLL SAT ソルバーを作成しました。私の目標は、多数のスレッドでソルバーを実行して n-Queen 問題を解決することです。現在、私のアルゴリズムは、一度に 1 つずつ真理値表の行を生成し、それを解決するためにスレッドにフィードします。問題は、私の真理値表の生成がスレッドによって同時に実行できないことです。スレッドが真理値表の行を取得する場合、メソッドをロックし、行を生成してから、ロックを解除する必要があります。真理値表の行を生成するときの作業が減れば、速度を向上させることができます。アトミックカウント値をバイナリに変換して、スレッドでテストするだけです。回答ありがとうございます。

4

4 に答える 4

1

最初の行は行 0 ですか、それとも行 1 ですか? 0 の場合、基本的に行番号をバイナリ表現に変換する必要があります。たとえば、3 つのブール変数がある場合は、次のようにします。

0 -> 0 0 0
1 -> 0 0 1
2 -> 0 1 0
3 -> 0 1 1
...

次に、それらのビットと真の関数を使用して結果を計算します。

于 2014-03-05T16:06:46.453 に答える
1

行を生成する関数と、その行に対応する入力の値を知る必要があります。これら 2 つのことを理解すれば、実装は簡単です。

たとえば、関数が AND で、行 3 が 0,1 の場合、行は 0, 1, 0 AND 1 - これは 0,1,0 です

しかし、入力がその行にどのような値を持っているかをどうやって知るのでしょうか? それはテーブルのレイアウト方法に完全に依存しますが、おそらくビットマスキングとシフト演算子を使用して、行から計算できるはずです。

于 2014-03-05T16:07:28.730 に答える
0

マッピングについて少し話しているようです。

真理値表に興味がある場合は、こちらをご覧ください

于 2014-03-05T16:08:36.897 に答える
0

作成した行のみを保持するデータ構造を使用することを選択できます。のようなものを考えるかもしれませんHashMap<int,boolean[] truthinfo>。残りは質問者の演習として残します。

于 2014-03-05T16:29:20.637 に答える