很久之前就聽說過吳軍博士《數學之美》的大名,但遲遲未讀。
什麼原因呢?
一提到數學,我腦袋中不免出現「微積分、泰勒公式、無窮級數」等令人無比頭痛的概念。它似乎是居學堂之高,離實際之遠。
然而前不久讀完,真真兒有醍醐灌頂、耳目一新之感。
在《數學之美》中,吳博士將數學原理講的通俗易懂,並通過實際的例子展示了數學的超級能力。
如書中提到的一系列複雜的計算機問題(分詞、語音識別、機器翻譯等),都被科學家們用數學知識輕鬆解決。作為非專業人士(我)也看的是津津有味。
我由衷的欽佩那些為人類做出偉大貢獻的計算機科學家們,更被數學的強大威力而震撼。
同時不得不為自己的淺薄無知而感到無比羞愧。
作為平凡人,是否就不能親身感受到數學之美麼?我這樣想。
直到某天,看到一道演算法題——打家劫舍:
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。這是一道關於動態規劃的題,熟悉的同學可能很快就知道解法,但我在分析過程中切切實實感受到了一把數學之美。分享一下。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
【分析】
動態規劃的三個特徵:
我們知道,解決動態規劃問題的關鍵,就是【找規律】。
根據動態規劃類問題的特徵,得到每個子問題的最優解,那麼最終的結果就是最優的。
解題的一般思路為:
就本題而言,可以把問題抽象為:給定一組非負整數,在相鄰兩項不能相加的前提下,求最大和。
用數學公式寫出通項:
f(n) = max(n + f(n-2), f(n-1)). 其中n = 1,2,3... (*)
這裡,我們可以用初中知識【數學歸納/演繹】來驗證通項(*)的正確性。
假設給定的資料為:x1,x2,x3...,xn。其中1,2,3...,n表示下標
f(1) = max(x1 + f(-1), f(0)) = x1 ------------f(1)結果最優
f(2) = max(x2 + f(0), f(1)) = max(x2, x1) ----f(2)結果最優
f(3) = max(x3 + f(1), f(2)) ------------------f(3)結果最優
...
推證過程從後往前,是假設已知結論求通項,是為找到解題關鍵。
但實現過程應從前往後,子問題有了最優解,整體問題解才最優。
於是,寫**便成了一件相對容易的事:
int robmax (vectornums)
return current;
}
演算法問題最終都是數學問題——hen·bionian
拋磚引玉也好,班門弄斧也罷,其實都是為了安利《數學之美》這本小書。
還記得餘弦定理、線性代數嗎?你是否也認為它除了能算夾角、解線性方程外並沒有實際的用處?《數學之美》會給你答案。
當然,我舉的小小例子遠不如書中講的深刻、精彩。莫見怪莫見怪。
完)
感受到LDT的好處
1 首先從乙個異常開始的 2 從trace裡可以看到 init main 被呼叫了,而該函式是kernel的函式,也就是說問題不是出現boot和load的階段。3 接下來看產生 pf的 eip 是 0x7b7b,這個位址看起來很詭異。首先kernel開始的指令的位址是0x30400,而這個 0x7b...
可以感受到的好領導
對於程式設計師 我相信很多現代企業的員工也適合此標準 講,好的領導的標準是什麼?有人講技術能力要高,有人講德行要高。要我說,這些都是廢話 空話。好的領導,一定是可以感受到的!我接觸過很多態別的領導,很多領導都給我留下很深刻的印象。好領導之所以給你好的感受,往往就是因為他帶給你你所需要的。而且有一點,...
感受到程式設計師的艱辛了
參加工作快一年了,從剛剛初出茅廬,到現在初長成,確實感受到了程式設計師的艱辛了。我參加這行完全是憑著自己的興趣,愛好。其實我的iq也許並不適合幹這行。有時候乙個簡單的問題會鬱悶上一整天,但隨著專案經理的一點撥,原來如此的簡單。分分鐘就能搞定。我們全公司,加班加點,天天搞到深夜,終於一周後出了個模型,...