Math 布尔公式的简化,无求反,仅和/或

Math 布尔公式的简化,无求反,仅和/或,math,logic,boolean,Math,Logic,Boolean,我想对布尔公式进行预处理,这样 a和(a或b)和c 变得公正 a和c 从来没有任何否定,所以这应该是一个简单的问题,但没有什么真正明显的出现在脑海中(除了折叠和in-and,或in-or,重复,排序)。我是否遗漏了一些显而易见的东西?A(A+B)C AAC+ABC AC+ABC A1C+ABC A(1+B)C A(1)C 交流电 这就是你要找的吗?使用 基本上,您将创建公式可能结果的内存图。解析它,并以这样一种方式存储它:给定所有变量的任意输入,就可以得到一个结果。然后创建一个N维数组(其中N是

我想对布尔公式进行预处理,这样 a和(a或b)和c

变得公正 a和c

从来没有任何否定,所以这应该是一个简单的问题,但没有什么真正明显的出现在脑海中(除了折叠和in-and,或in-or,重复,排序)。我是否遗漏了一些显而易见的东西?

A(A+B)C

AAC+ABC

AC+ABC

A1C+ABC

A(1+B)C

A(1)C

交流电

这就是你要找的吗?

使用

基本上,您将创建公式可能结果的内存图。解析它,并以这样一种方式存储它:给定所有变量的任意输入,就可以得到一个结果。然后创建一个N维数组(其中N是变量的数量)并尝试每个组合,将结果存储在数组中

完成此操作后,按照上面文章中的步骤生成一个简化表达式

请注意,这适用于包含所有类型布尔运算符(包括not)的表达式。

请考虑转换为或


简化“底层”很容易——只需删除重复项。简化下一级几乎同样容易——删除子集或超集。

从您的示例中,通常不清楚您想要什么

您似乎希望使用尽可能简化公式:

A ∨ (A ∧ B) = A 

A ∧ (A ∨ B) = A 

在你的例子中,你只需要应用第二吸收定律一次。

我在CSTheory.stackexchange上有一个相关的问题,回答是否定的

你所描述的问题很难解决。因此,除非P=NP,否则您将找不到有效的算法来实现这一点


转换为CNF或DNF将导致某些公式的指数膨胀。

展开是否会可靠地简化它?很明显,它可以在发现它的重复之前将它按指数放大,并且应该有某种方法利用否定的缺乏(否则它是NP完全的)。包括NOT通过将SAT简化或不简化为false的琐碎简化使问题NP完全。我不认为这是一种方式,有时公式中有大量的术语。这是一种方式。K映射能够将任意复杂的布尔表达式简化为最简单的形式。因此,它适用于任何输入,前提是您能够以足够快的速度计算结果。(每个额外变量的计算能力大约是生成真值表所需计算能力的两倍。即使是几百个变量,在今天的处理器上也只需要很少的时间。)(a和b)或者(a和c)或者(b和c)应该变成什么?有什么不同吗?不幸的是,没有更简单的方法来表示多数(a,b,c)-这是电路设计中的一个众所周知的问题。一些答案已经给了你布尔简化。你还没有接受答案,你的评论让我觉得我们可能不太理解这个问题??是这样吗?