【发布时间】:2014-06-05 04:01:28
【问题描述】:
是否有算法和/或工具来检测两组具有相同条件的if 语句是否相等?当我说“等效”时 - 我的意思是它们对所有给定的输入执行相同的代码。例如:
# set 1
if a
if b
someMethod()
end
end
# set 2
if a && b
someMethod()
end
# set 3
if a || b
someMethod()
end
鉴于这 3 组 if 语句,您可以认为 set 1 和 set 2 是“等价的”,因为 someMethod 只有在 a 和 b 为真时才会执行。同样,set 1 和 set 3 不等价,因为 someMethod 在 a 为 true 且 b 为 false 时不会被 set 1 执行,但会在相同条件下在 set 3 中执行。
【问题讨论】:
-
没有通用方法,因为
if条件可能是任意复杂的——例如它们可能取决于 pi 的百万位数字是多少。 -
这听起来像是一个众所周知的 NP 完备的可满足性应用。
-
@j_random_hacker - 我已经修改了我的问题以指定所有 if-statement-sets 必须具有与条件相同的输入。
-
@Quirliom - 很有趣...我以前没听说过,所以在快速搜索之后,如何证明各种集合是可满足的有助于确定这些集合是“等价的”?跨度>
-
@mralexlau:在这种情况下(并进一步假设它们仅通过
&&和||等逻辑运算符组合)很容易:只需为每个计算一个真值表,看看它们是否'是相同的。如果有 n 个输入,该表将有 2^n 行。
标签: algorithm