|
1
9
我认为,创建排尽(可能排尽)真值表的竞争方法是将所有表达式简化为规范形式,并进行比较。例如,将所有内容重写为 连接正常形式 关于符号顺序(如术语中的字母顺序)和术语(如术语中第一个符号的字母顺序)的一些规则。当然,这要求一个表达式中的符号A与另一个表达式中的符号A相同。 如何编写(或从网上抓取)C或C++函数,将您的表达式重写为CNF,我不知道。然而,在C和C++中有很多人工智能工作,所以当你谷歌时你可能会发现一些东西。 我也有点不确定这种方法和真值表方法的比较计算复杂性。我强烈怀疑这是一样的。 无论您使用真值表还是规范表示,您当然可以根据输入表单所包含的不同符号的数量将输入表单分成多个组,从而减少要完成的工作。 编辑:在阅读其他答案时,特别是生成所有真值表并进行比较的建议,我认为@iulian严重低估了可能的真值表的数量。 假设我们使用rpn来编写表达式,这将避免处理括号,并且有10个符号,这意味着9(二进制)运算符。会有10个!符号的顺序不同,运算符的顺序也不同。因此将有10个!x 2^9=此表达式的真值表中的1857945600行。这确实包括一些重复项,例如,任何只包含“and”和“or”的表达式都将是相同的,而不管符号的顺序如何。但我不确定能不能再进一步… 还是我犯了个大错误? |
|
|
2
8
您可以在所有可能的输入上计算每个表达式的真值表,然后比较真值表。 |