2013-06-22 129 views
-4

我試着在過去提出這個問題,但我並不清楚我的問題。 所以讓我們再試一次,希望這次能夠清楚。 我的3×3像這樣的矩陣:數學運算的矩陣

a * b 
+ c * 
d + e 

我必須找到數學運算的所有不可能性的組合如下這樣的邏輯:

a * ba + ca * ca + db *c, B * C , b * ec + dc + dc * ec + ed + e是在該矩陣中的兩個操作數的組合的操作。由於我已經選擇的乘法和加法就沒有必要,因爲它們是等於其上面已經提到的序列a * bc + d採取操作b * ad + c。你們中的一些人會問爲什麼b * cc + d提交兩次。其原因是,c達到d通過兩個不同的+跡象,也同樣適用於bc因爲它們是通過兩個不同的多個標誌達到彼此。 開發這個邏輯我必須通過這個矩陣,並找到三個四個和五個操作數的所有其他序列。

有人能幫我找到一個算法來找出使用上述邏輯數學運算的所有組合?

我希望這次我的問題很清楚。我會感謝您的幫助來解決這個難題。非常感謝。

+5

「我希望這一次圍繞我的問題是明確的」不要挑剔或任何東西,但在你的文本無處是一個真正的問題。 –

+0

親愛的馬特問我什麼不清楚,我會盡力詳細說明。 –

+0

你可以開始注意你的整個文本沒有一個問號。 –

回答

1

我假設你的唯一運營商將是*+,因爲你沒有提到其他地方。你需要儘快告訴我(這是詢問crystal-clear question的一部分),如果這種假設不正確。

將矩陣表示爲圖形,其中符號表示頂點,操作數{a, b, c, d, e}和運算符{*_1, *_2, +_1, +_2}之間的邊。

接下來,從每個頂點開始,深度優先搜索所有奇數 - 永遠不會訪問頂點兩次的長路徑(標準DFS)。

這將給你一個所有可能的有效數學表達式的列表。

最後,您需要減少「冗餘」表達式(意味着那些可交換地相等於到列表中的另一個表達式)。我們要做的是對所有表達式應用排序。對於每個表達式,我們將首先列出所有乘法運算,然後爲每個運算符按字母順序列出其操作數,從而生成等效表達式。因此,例如e + d * b + ab * d + a + e和​​→a * b * d + e。利用+*的結合性和交換性,這是有效的。這並不難,請使用分析樹。一旦我們有這個訂購,很容易刪除重複。

:沒有,如果這是一個實際的詞線索;就是現在。

+0

是的Jason,唯一的操作符是+和*。感謝您的回答,現在我將嘗試實現代碼。 –

+0

如果允許回溯,OP還需要清楚;從這個例子看起來不是,但隨着長度變長,這變得更加棘手,那麼週期呢? –

+0

是馬特回溯是不被允許的,即使傑森提供的解決方案我抓我的頭.....傑森你可以提供我一個問題的僞代碼??它可以真正幫助我更好地理解你的解決方案。謝了哥們。 –