【问题标题】:Truth Table too big to compute真值表太大而无法计算
【发布时间】:2015-08-26 11:15:19
【问题描述】:

我有一个像这样解析的布尔条件:(a v b) ^ (c ^ d)... 带有列表中的元素。算上变量、括号和运算符,这个列表大约有一千个元素长。条件中有大约 80 个变量。

我尝试了两种不同的方法,但它们都不起作用:如果我使用真值表来解决条件为真,在最坏的情况下我需要 2^80 次迭代,这需要大量的时间来计算。另一种方法是将条件转换为析取范式,并为一个操作数找到解决方案。此方法适用于较小的条件,但对于较大的条件,系统会耗尽内存,因为结果条件包含数百万个元素。

对于这类问题有有效的技术吗?也许使用数据库来存储元素,或者将真值表转换为某种二叉树?

提前致谢,

米格尔

【问题讨论】:

  • minisat(minisat.se) 可能是解决这个问题的最著名的 OSS 软件。正如@JohnColeman 的回答,这是一个 NP 完全问题,但研究了许多好的启发式方法。

标签: optimization boolean-expression np


【解决方案1】:

真值表是一种有效的技术——只是并不总是可行

这是 NP 完全问题(实际上是 1971 年 Cook 证明的第一个 NP 完全问题)。已经有decades of work 提出了导致良好启发式和精确方法(有时工作迅速,有时需要数十亿年)的问题,可能解决您的问题,但如果您既富有又出名您发现了一种总能解决此类问题的可行技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多