【问题标题】:Is there an algorithm for comparing if statements?是否有比较 if 语句的算法?
【发布时间】: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


【解决方案1】:

我会使用Karnaugh Maps,这是非时序逻辑综合和分析的标准。

  1. 为每组ifs 创建卡诺图

  2. 比较地图

    如果映射相同,则 if 语句是等效的,如果不是,则它们是不同的。

抱歉,回答简短,但我不知道还有什么要补充的,因为这是基本知识。

[edit1] 只是你的情况......

  • set1 == set2
  • set3 不一样

【讨论】:

  • 感谢您的回答,但对您来说可能是“基本知识”的知识对其他人来说可能不是基本的:P
  • @mralexlau 抱歉,我已经习惯了这种基本的逻辑知识和推理是在我学生时代在全球范围内教授的......现在学校里的废话越来越多(至少在我和靠近国家)而不是像我习惯的有用的东西
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 2023-03-31
  • 2022-08-16
  • 1970-01-01
  • 2022-11-16
  • 2017-01-04
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多