我想预处理布尔公式 a和(a或b)和c
变得公正 a和c
从来没有任何否定,所以它应该是一个简单的问题,但是没有什么是真正明显的(除了折叠和 - 或 - 或 - 或 - 重复,排序)。我错过了一些完全明显的东西吗?
答案 0 :(得分:1)
从你的例子来看,你一般都不清楚你想要什么。
您似乎希望尽可能使用absorption laws来简化公式:
A ∨ (A ∧ B) = A
A ∧ (A ∨ B) = A
在您的示例中,您只需要应用第二次吸收法。
答案 1 :(得分:1)
我在CSTheory.stackexchange上有一个相关的问题,负面回答here。
您所描述的问题是难以驾驭的。因此,除非P = NP,否则您将找不到有效的算法。
转换为CNF或DNF将导致某些公式的指数性爆炸。
答案 2 :(得分:0)
A(A + B)C
AAC + ABC
AC + ABC
A1C + ABC
A(1个+ B)C
A(1)C
AC
那是你在找什么?
答案 3 :(得分:0)
使用K-map。
基本上,您将创建公式的可能结果的内存图。解析它,并以给定所有变量的任意输入的方式存储它,您可以得到结果。然后创建一个N维数组(其中N是变量数)并尝试每个组合,将结果存储在数组中。
完成此操作后,请按照上文中的步骤提出简化表达式。
请注意,这适用于包含所有类型布尔运算符的表达式,包括不包含。
答案 4 :(得分:0)