-1

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

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

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

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

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

您需要知道生成行的函数以及输入中的哪些值对应于该行。一旦你知道了这两件事,实现就很简单了。

例如,如果函数为 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 回答