【发布时间】:2015-08-26 11:15:19
【问题描述】:
我有一个像这样解析的布尔条件:(a v b) ^ (c ^ d)... 带有列表中的元素。算上变量、括号和运算符,这个列表大约有一千个元素长。条件中有大约 80 个变量。
我尝试了两种不同的方法,但它们都不起作用:如果我使用真值表来解决条件为真,在最坏的情况下我需要 2^80 次迭代,这需要大量的时间来计算。另一种方法是将条件转换为析取范式,并为一个操作数找到解决方案。此方法适用于较小的条件,但对于较大的条件,系统会耗尽内存,因为结果条件包含数百万个元素。
对于这类问题有有效的技术吗?也许使用数据库来存储元素,或者将真值表转换为某种二叉树?
提前致谢,
米格尔
【问题讨论】:
-
minisat(minisat.se) 可能是解决这个问题的最著名的 OSS 软件。正如@JohnColeman 的回答,这是一个 NP 完全问题,但研究了许多好的启发式方法。
标签: optimization boolean-expression np