任何人都可以考虑在不创建整个表的情况下生成真值表的一行。例如,用户输入行号,然后生成真值表行。此外,在到达该行号之前,应该在不创建表的情况下完成此操作。本质上,我想知道是否有一种有效的方法来仅基于真值表行作为输入来计算真值行值。
示例: 假设 3 个变量 printTruthTableRow(3) 将产生 010
实际上,我可以将 input-1 转换为二进制值来获取真值表行吗?
编辑:让我给你们提供更多背景知识。我用 Java 编写了一个基本的 DPLL SAT 求解器。我的目标是让一堆线程运行求解器来解决 n-Queen 问题。目前,我的算法一次生成一行真值表,然后将其提供给线程进行求解。问题是我的真值表生成不能由线程同时完成。如果线程获取真值表行,它必须锁定该方法,生成一行,然后解锁。如果生成真值表行时完成的工作较少,我可以提高速度。我可以将原子计数值转换为二进制并让线程对其进行测试。谢谢大家的解答。
第一行是第 0 行还是第 1 行?如果 0 那么你基本上只需将行号转换为其二进制表示形式,例如如果你有 3 个布尔变量,请执行类似的操作
0 -> 0 0 0
1 -> 0 0 1
2 -> 0 1 0
3 -> 0 1 1
...
然后使用这些位和您的真值函数来计算结果。
您需要知道生成行的函数以及输入中的哪些值对应于该行。一旦你知道了这两件事,实施就变得微不足道了。
例如,如果函数为 AND 并且第 3 行为 0,1,则该行为 0, 1, 0 AND 1 - 即 0,1,0
但是您如何知道该行的输入值是什么?这完全取决于您如何布置表格,但应该可以从行进行计算 - 可能使用位掩码和移位运算符。
看起来,你正在谈论一些映射。
如果您对真值表感兴趣,那么看看这个。
您可以选择使用仅保存您创建的行的数据结构。 您可能会考虑类似
HashMap<int,boolean[] truthinfo>
的内容。 剩下的就留给提问者作为练习了。
您可以在线查看最好的真相表格制作者,以方便地完成您的任务。