這個(gè)題目做得好辛苦。題目大意是給三個(gè)算術(shù)表達(dá)式,前兩個(gè)相加等于第三個(gè),每位數(shù)都用字母代替,問最后字母對(duì)應(yīng)的數(shù)是多少。數(shù)據(jù)范圍n <= 26。由于進(jìn)位不確定,因此需要枚舉進(jìn)位,再用高斯消元求解。我報(bào)著試一試的態(tài)度敲了一個(gè)2 ^ n * n ^ 3的程序上去,果然超時(shí)了。不知道應(yīng)該如何優(yōu)化,到網(wǎng)上看了一下,因?yàn)槊看蚊杜e的都是常數(shù),因此可以先把每個(gè)未知數(shù)用常量表示出來,這樣每次枚舉回帶求解的復(fù)雜度就降到了O(n ^ 2)。感覺這種做法很巧妙,不過實(shí)現(xiàn)的時(shí)候出了很多問題,搞了一下午才搞定- -!
首先需要保存對(duì)于每個(gè)變量,它對(duì)應(yīng)的每個(gè)常數(shù)的系數(shù)是多少。開始的時(shí)候我列方程的方向想錯(cuò)了,相當(dāng)成模n域的方程組來求解。結(jié)果寫了很久之后發(fā)現(xiàn)因?yàn)閚不一定是素?cái)?shù),所以求解的時(shí)候解可能有多個(gè),這樣的話就比較復(fù)雜了。后來一怒之下索性當(dāng)成實(shí)數(shù)域來求解,重新列了方程,這樣解就是唯一的了,但是中間運(yùn)算全是浮點(diǎn)數(shù),很擔(dān)心精度問題,交上去居然過了。
這個(gè)題目加速消元的思想還是很值得借鑒的,高斯消元的優(yōu)化問題不多,但是感覺都挺有意思,就像用弦圖加速高斯消元。根據(jù)方程的不同特點(diǎn)來選擇合適的優(yōu)化方法很重要啊。
posted on 2009-06-10 21:49
sdfond 閱讀(226)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Algorithm - Ad Hoc