我有一个像这样解析的布尔条件:(a v b) ^ (c ^ d)...
包含列表中的元素。计算变量,括号和运算符列表的长度大约是一千个元素。条件中有大约80个变量。
我尝试了两种不同的方法,但没有一种方法可行:如果我使用真值表来解决条件为真,我需要在最坏的情况下进行2 ^ 80次迭代,这需要花费大量的时间来计算。另一种方法包括将条件转换为Disjuntctive Normal Form并找到一个仅适用于一个操作数的解决方案。这种方法适用于较小的条件,但对于较大的条件,系统会耗尽内存,因为结果条件有数百万个元素。
这种问题有效吗?也许使用数据库来存储元素,或者在某种二叉树中转换真值表?
提前致谢,
米格尔
答案 0 :(得分:0)
真值表是一种有效的技术 - 并不总是可行。
这是NP完全的(实际上 第一个问题在1971年被Cook证明是NP完成的)。有decades of work问题导致良好的启发式方法和准确的方法(有时可以快速工作,有时需要数十亿年),可能会解决您的问题,但您会富裕起来如果你发现一种可以解决这些问题的可行技术,那就很有名了。