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