Programming languages 评估条件的所有可能组合

Programming languages 评估条件的所有可能组合,programming-languages,combinations,conditional-statements,stateflow,Programming Languages,Combinations,Conditional Statements,Stateflow,例如: if(A & B) { if(C) { } if(D) { } } 对于本代码中的所有条件,我们有四种不同的状态。 0表示False,1表示true状态。 *显示该条件在此状态流中无效。 所以在这种情况下,所有可能的状态都列在下面 A、B、C、D 0*** 10** 110 10101 说明: 在第一状态(0***)中,条件A为真。因此,代码中没有B的角色。因为在评估A本身后,如果案例失败。因此,也不评估条件C和D。 就像其他三

例如:

if(A & B)
{
    if(C)
    {
    }

    if(D)
    {
    }
}
对于本代码中的所有条件,我们有四种不同的状态。 0表示False,1表示true状态。 *显示该条件在此状态流中无效。 所以在这种情况下,所有可能的状态都列在下面

A、B、C、D

0***

10**

110

10101

说明: 在第一状态(0***)中,条件A为真。因此,代码中没有B的角色。因为在评估A本身后,如果案例失败。因此,也不评估条件C和D。 就像其他三种可能的状态一样

但是,是否有任何已经实现的算法,我可以通过它找到特定输入的所有这些状态。因为当我们试图解决更复杂的嵌套代码时,这会变成一个巨大而复杂的问题。 我认为编写一个应用程序来给出这样的结果是非常困难的


如果有人知道一些已经实现的东西可能对我有帮助,请让我知道这些。

很抱歉,我是这个消息的传递者或坏消息的传递者,但由于两个非常著名的原因,这个算法是不可能的

停顿问题 要在一个时间内解决这个问题,您需要解决。如果示例程序如下所示:

if(A & B & maybeAnInfiniteLoop())
{
    if(C)
    {
    }

    if(D)
    {
    }
}
那么,我们将无法从理论上知道函数是否为finiteloop终止,因此C和D是否重要,或者布尔的唯一有效状态是否为00*、10*或01*,因为11*永远不会结束,C和D永远不会到达

全类 现在,让我们假设您能够将问题简化为布尔表达式。在语言的一个子集中,只有IF、AND、OR、NOT和booleans,该语言不是图灵完备的。这就是所谓的。布尔表达式语言就是这种有用语言的一个例子

然而,即使我们可以保证程序停止,确定该语言中所有有意义的布尔状态的算法也是一个问题。事实上,它是最著名的城市之一。它叫“世界杯”。注意,在你的例子中,你说当A或B为假时,C和D是没有意义的。这是因为您知道满足表达式“A&B”的A和B的唯一值集是(1,1)。你可以这样做,因为这是一个非常简单的表达式,但在一般情况下,解决这个问题的算法可能不会在你的有生之年完成一些非常合理的输入

有希望吗?
这个问题没有一个已知的答案。事实上,这可能是今天最重要的数学开放题。如果P=NP,那么你很幸运,但我不会让你抱有希望。聪明的钱在P上并不等于NP。

你也有
1
是的,你是对的。我错过了:)而且
110
也是可能的。是的。还有一个:)即使在这个简单的例子中,我也没有找到你们提到的一些重要状态。这就是我发布这个问题的原因。当我试图解决一些复杂的嵌套if-else-s时,我真的很头疼。