2014-06-05 28 views
1

是否有一个算法和/或工具用于检测具有相同条件的两组if语句是否相同?当我说“等价”时 - 我的意思是他们对所有给定的输入执行相同的代码。例如:是否有比较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语句,可以考虑设置1和设置2是在someMethod当A和B都是真实的,只有得到执行的“等价”。同样,set 1和set 3不等价,因为当a为真且b为false时,someMethod将不会被set 1执行,但在相同条件下将在set 3中执行。

+1

有没有通用的方法,因为'if'条件可能是任意复杂的 - 例如他们可能取决于pi的百万位数。 –

+2

这听起来像是一个众所周知的可满足性应用程序,它是NP完整的。 – Sinkingpoint

+0

@j_random_hacker - 我已经修改了我的问题,指定所有if语句集都必须具有与条件相同的输入。 – mralexlau

回答

3

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

  1. 创建卡诺图每组if小号

  2. 比较图

    如果地图是相同的,则如果如果没有的话,他们是不同的语句是等价的。

对不起,我不知道还有什么要补充的,因为这是基本的知识。

[EDIT1]刚才你的情况...

example

  • set1 == set2
  • set3是不同
+0

尽管您的答案值得赞赏,但对您而言可能是“基本知识”的其他人可能不是基本知识:P – mralexlau

+1

@mralexlau对不起,我习惯于将此基本逻辑推理和推理全面教我的学校时代......现在学校里有越来越多的垃圾(至少在我的和邻近的国家),而不是像我习惯的有用的东西 – Spektre