【发布时间】:2014-10-02 22:55:34
【问题描述】:
我正在尝试编写一段可以将布尔表达式的 LENGTH 减少到最小的代码,因此代码应该将表达式中的元素数量减少到尽可能少。现在我被困住了,我需要一些帮助=[
规则如下:布尔表达式中可以有任意数量的元素,但它只包含 AND 和 OR 运算符以及括号。
例如,如果我传入一个布尔表达式:ABC+BCD+DE,则最佳输出将是 BC(A+D)+DE,这与原来的相比节省了 2 个单位空间,因为这两个 BC 组合在一起合而为一。
我的逻辑是,我会尝试找出表达式中出现频率最高的元素,并将其分解出来。然后我递归地调用该函数对分解的表达式做同样的事情,直到它被完全分解。 但是,我怎样才能找到原始表达式中最常见的元素?也就是说,在上面的例子中,BC?似乎我必须尝试所有不同的元素组合,并找出每个组合在整个表达式中出现的次数。但这听起来真的很幼稚。 第二个
有人可以提示如何有效地做到这一点吗?甚至我可以在 Google 上搜索到的一些关键字也可以。
【问题讨论】:
-
@Li-aungYip Ya 我已经想到了,但这只是在你使用铅笔和纸的情况下,对吗?我怎样才能制作一个可以做到这一点的计算机代码?
-
加上括号,BC(A+D)+DE 和 ABC+BCD+DE 长度相同。我现在正在解决同样的问题。这个link 在代数最小化部分稍微谈到了它。我认为它只是将布尔标识应用于公式。
标签: python algorithm math boolean