【问题标题】:All possible combinations for evalution of conditions评估条件的所有可能组合
【发布时间】:2014-01-25 17:07:14
【问题描述】:

例子:

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

    if(D)
    {
    }
}

对于这段代码中的所有条件,我们有四种不同的状态。 0 代表 False,1 代表真实状态。 * 表示条件在此状态流中无效。 所以在这种情况下,下面列出了所有可能的状态。

A B C D

0 * * *

1 0 * *

1 1 1 0

1 1 0 1

说明: 在第一个状态 (0 * * *) 中,条件 A 为真。因此,B 在代码中没有任何作用。因为在评估 A 本身之后,if 案例失败了。因此条件 C 和 D 也不会被评估。 其他三种可能的状态也是如此。

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

如果有人知道某种已经实现的东西可能对我有帮助,请告诉我。

【问题讨论】:

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

标签: programming-languages combinations conditional-statements stateflow


【解决方案1】:

很抱歉成为承载者或坏消息,但由于两个非常著名的原因,此算法是不可能的。

停机问题

要在Turing-Complete language 中解决此问题,您需要解决Halting problem。如果您的示例程序如下所示:

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

    if(D)
    {
    }
}

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

NP-完全

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

但是,即使我们可以保证程序停止,在该语言中确定所有有意义的布尔值状态的算法也是一个NP-complete 问题。事实上,它是最著名的。它被称为Boolean Satisfiability Problem。请注意,在您的示例中,当 A 或 B 为假时,您说 C 和 D 没有意义。这是因为您知道满足表达式“A&B”的 A 和 B 的唯一值集是 (1,1)。您可以这样做,因为它是一个非常简单的表达式,但是对于一些非常合理的输入,在一般情况下解决此问题的算法可能无法在您的生命周期内完成。

还有希望吗?

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

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2018-10-04
    相关资源
    最近更新 更多