[英]Algorithm to simplify boolean expressions
我想简化表单的一个非常大的布尔函数:
f(a1,a2,....,an)= (a1+a2+a5).(a2+a7+a11+a23+a34)......(a1+a3+an).
'' 是指OR
'+'表示AND
可能有100个这样的术语('。'相互之间)n的值可能高达30。
有没有可行的算法来简化这个?
注意:这不是实验室分配,是我的项目中通过粗糙集生成规则的一小部分,其中f是不相似函数。
众所周知的方法是:
第二种方式最常用于计算机上。 这是表格和直截了当的。 第一种方法是手动完成的最佳方式,更有趣,但你不能可靠地使用它超过4个变量。
如果将a值表示为int
或long
,其中a1的值为2,则a2的值为4,a3的值为8等:
int a =(a1?2 ^ 1:0)+(a2?2 ^ 2:0)+(a3?2 ^ 3:0)+ ...;
(为了保持简单而浪费一点,忽略了a0 = 1你会更好的事实)
并且您对所有术语都这样做:
long[] terms = ...;
terms[0] = 2^0 + 2^3 + 2^5 // a1+a2+a5
terms[1] = 2^2 + 2^7 + 2^23 + 2^34 // (a2+a7+a11+a23+a34)
然后你可以找到结果:
foreach(var term in terms)
{
if (a & term == term) return true;
}
return false;
但这只适用于n = 64。 在它之上它是凌乱的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.