2017-03-07 112 views
0

我正在下面的算法進行破解編碼專訪:布爾的括號算法

鑑於包含符號的布爾表達式{真,假,和, 或,異或},算上數如何將表達式如 這樣的表達式加以評估爲真。

作者詳細說明了在每個運算符char處放置括號的遞歸解決方案。例如,如果表達式爲1^0^0 | 1,則置於char = 1將是(1)^(0^0 | 1)。

她爲每個操作符char i從1到n(其中兩個表達式從0到i,i + 1到n)執行此操作,然後在每個子字符串上調用遞歸函數。

這是我不明白。例如,1 ^(0^0)| 1這個表達式被排除在這個過程之外。這是爲什麼?這不是很重要嗎?

+0

假設左結合,可以通過該方法'(1^0^0)得到|(1 ) - >((1)^(0^0))|(1)' – BallpointBen

+3

如果允許多餘的括號,則答案爲零或無限。 – wildplasser

回答

0

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) 
     +--((1^0)^0) | (1) 
     +--(1^(0^0)) | (1) ← here it is