有趣的算法问题

时间:2010-08-04 14:01:57

标签: algorithm language-agnostic

我这里有一个有趣的算法问题。问题在于与电子设计的模拟有关。

比如说,我有一个包含一些门的结构。说一个3输入AND门。 有8种可能的输入,即

000
001
...
111

在这8个输入中,如果我只输入两个输入(000)(111),我会得到两个可能的输出,即01

因此,在输出上产生状态'0'和'1'的最小输入向量集是{000,111}。

给出了一个设计,一些门的排列,给出了一个算法来找到最小输入向量集,在最终输出上产生两种状态(即0和1)。

2 个答案:

答案 0 :(得分:13)

您的问题等同于解决boolean satisfiability problem问题。因此它是NP完全的。

要获得其中一个输入,您可以选择任意输入并查看是否给出0或1.要查找提供其他输出的输入,您需要SAT求解器。

维基百科建议可以使用一些algorithms

如果您不想实现它,有些工具可以随时使用SAT求解器:

  • CVC3(开源LGPL)
  • Yices(免费用于非商业用途)

答案 1 :(得分:5)

这是通过Quine McCluskey算法解决的。还有一些JavaScripts和工具可以解决您的问题。