布尔括号化算法

时间:2017-03-07 21:01:23

标签: algorithm recursion dynamic-programming

我正在开发Cracking The Coding Interview中的以下算法:

  

给定一个包含符号{true,false,和的符号的布尔表达式   或者,xor},计算括号表达式的方法的数量   它评估为真。

作者详细介绍了在每个运算符char上放置括号的递归解决方案。因此,例如,如果表达式是1 ^ 0 ^ 0 | 1,那么放置在char = 1将是(1)^(0 ^ 0 | 1)。

她为每个运算符char i执行此操作,从1到n,其中两个表达式从0到i,i + 1到n,然后在每个子字符串上调用递归函数。

这是我不明白的地方。例如,1 ^(0 ^ 0)| 1此表达式被排除在此过程之外。这是为什么?这也不重要吗?

1 个答案:

答案 0 :(得分:0)

1 ^ (0 ^ 0) | 1(1 ^ (0 ^ 0)) | (1)相同。

由于您提到了递归插入的parantheses,因此没有遗漏任何内容:

    1 ^ 0 ^ 0 | 1
    |
    +--(1) ^ (0 ^ 0 | 1)
    |  +--(1) ^ ((0 ^ 0) | 1)
    |  +--(1) ^ (0 ^ (0 | 1))
    |
    +--(1 ^ 0) ^ (0 | 1)
    |
    +--(1 ^ 0 ^ 0) | (1)
       +--((1 ^ 0) ^ 0) | (1)
       +--(1 ^ (0 ^ 0)) | (1)    ← here it is