关于java:真值表生成

Truth Table Generation

任何人都想在不创建整个表的情况下生成真值表的行。例如,用户将输入一个行号,并生成真值表行。同样,应该在不创建表的情况下完成此操作,直到获得该行号为止。本质上,我想知道是否存在仅基于真值表行作为输入来计算真值行值的有效方法。

例:
假设3个变量
printTruthTableRow(3)将产生010

实际上,我可以只将input-1转换为二进制值以获取真值表行吗?

编辑:让我给你们更多的背景。我用Java编写了基本的DPLL SAT求解器。我的目标是让一堆线程运行求解器来解决n皇后问题。目前,我的算法一次生成一行真值表,一次生成一个真值表,然后将其馈送到线程进行求解。问题是我的真值表生成不能由线程同时完成。如果线程抓住真值表行,则它必须锁定方法,生成一行,然后解锁。如果在生成真值表行时进行的工作较少,则可以提高速度。我可以将一个原子计数值转换为二进制,然后进行线程测试。谢谢大家的回答。


您可能需要知道为之生成行的函数,以及输入中与该行对应的值。一旦了解了这两件事,实现就变得微不足道了。

例如,如果函数为AND,第3行为0,1,则该行为0、1、0和1-为0,1,0

但是您如何知道该行的输入具有什么值?这完全取决于您如何布置表格,但是应该可以从行中进行计算-可能使用位掩码和移位运算符。


第一行是行0还是行1?如果为0,则基本上只需要将行号转换为其二进制表示形式,例如如果您有3个布尔变量,请执行以下操作

1
2
3
4
5
0 -> 0 0 0
1 -> 0 0 1
2 -> 0 1 0
3 -> 0 1 1
...

然后使用这些位和您的真理函数来计算结果。


您可以选择使用仅包含您创建的行的数据结构。您可能会考虑类似HashMap的内容。其余的留给发问者练习。


看来,您在谈论映射的问题。

如果您对真值表感兴趣,请检查一下。