正DNF的压缩



我想在中压缩命题公式析取范式(DNF)。

我暂时只假设简单的DNF,没有否定文字。相反的过程,解压缩可以很容易定义对于仅由合取和析取建立的公式,以下重写规则将生成DNF:

A & (B v C) --> (A & B) v (A & C)
(A v B) & C --> (A & C) v (B & C)

以下是解压缩的示例:

Example: Decompression
Input:
  (p & (q v r) & s & (t v u)) v
  w.
Output:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v
  w.

现在我想知道周围是否有一些算法其可以从DNF生成返回的单个公式。我已经研究了二进制决策图。这个我对这些的问题是它们不能结合所有的间断都在路上。

例如,二进制决策图的算法使用共享,在打印和/或引入新的介词变量,两者都不可取:

Example: Compression (Bad)
Input:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v 
  w.
Output:
  (p & ((q & s & (t v u)) v (r & s & (t v u)))) v
  w.
- or -
Output:
  (p & ((q & h) v (r & h))) & (h <-> s & (t v u))) v
  w.

结果应该是一个单一的公式,不再是DNF,它比二进制决策图更紧凑仅使用析取和联合的算法,以及已经在原始DNF。以下是所需压缩的示例:

Example: Compression (Good)
Input:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v
  w.
Output:
  (p & (q v r) & s & (t v u)) v
  w.

你会怎么想?首选Prolog实现。

再见

我认为你需要的是一个系统的算法来计算两层布尔表达式的最小值(输入变量的连接的析取或输入变量的析取的连接)。

通常使用的算法是卡诺图和奎因-麦克罗斯基算法。

这些算法确实适用于否定的变量。在任何情况下,至少如果你的输入是析取范式(DNF),并且没有否定变量出现,那么表示为输入变量的析取和的输出也不会有否定变量)。

相关内容

  • 没有找到相关文章

最新更新