出于興趣,出于工作,一直很努力地看數學,可是,骨頭難啃啊。這幾天工作需要看了下JPEG編解碼的東東,DCT(離散余弦變換)的公式看了很多回,可是怎么由它用到程序中去?看了TI的IDCT代碼,搜了一下,原來還有像FFT(快速傅里葉變換)的蝶式快速算法。可是怎么換算過來的呢?搜到了相關論文來看,還是一頭霧水。
現在越來越后悔以前在校時為什么沒好好地學好數學?前幾年自考自己狠心地啃了好幾年,雖小撿了一下,但是還覺得遠不足用。現在的我一直苦惱,應該先深入哪一科先呢?性代?概率?統計?幾何?微積分?其實是一科扣一科,可能還得先從廣到深吧。
數學思維到計算機的機器思維,我覺得會有幾點比較難的:
1,如何從連續變到離散?
2,如何從復數或實數,變成浮點,甚至整數?
3,如何優化性能,以達到軟件跑得更快?或者簡化到可以放到FPGA之類的地方也能用?
學數學不只是公式,還要考慮應用,像一維的時候就是一段波,像音頻,那用到二維的時候呢?像圖像。三維又是如何?3D處理現在也很流行了。
學這些一下很難看到效果,成就感很難體現出來,為了給自己一點動力,也算是看看別人的一些學習方法,看了些文章。
######## 以下摘自 http://blog.csdn.net/mpzsw/article/details/6857128 ######
寫程序需要數學嗎?要看程序的目的?那我們就像討論一個簡單的程序,算出1加到100的總和。完全以程序結果為導向的人,或是訓練有素的程序女/男工,甚至有時連我都會直覺地寫出這樣的程序: - int sum = 0;
- for(int i=1; i<=100; i++)
- {
- sum += i;
- }
上面這個程序片段還算很容易讓人一眼就看懂,可是我們明明高中時就學過了這種數列級數的算法了,怎么還會寫出上面這么笨的程序呢? int sum = ((1 + 100) * (100 - 1 +1)) /2; //或更精簡的int sum = (101 * 100) >> 2; …… 為什么Google會這么重視算法和效率?應該說世界級的大公司都重視,Yahoo、微軟、YouTube…,因為你寫的程序不是給幾十個人、幾百個人用而已。而是同一時間有幾百萬,甚至上千萬人使用。一個人慢0.1秒好了,一百萬人就10萬秒,超過一天耶。瀏覽一個網頁,慢幾秒鐘你都不能忍受了,更何況是一天。你說能不計較算法和效率嗎?
#####################
看到上面的例子,我突然發現,原來小學時學的速算對我們來說還是相當有用的,一個循環你哪怕優化到匯編級別也比不過小學生的一個速算公式。
其實學哪個東西一開始都很難,就像我第一次學計算機時,看程序代碼,看那些原理就像看天書一樣,可是現在比看小說還輕松(當然算法的除外)。其實,學數學也同理,現在可能難,但是我相信不出幾年后我看到一堆的數學公式和符號也像現在看程序代碼一樣輕松自如。
下面這文章也不錯:
http://www.cnblogs.com/qdsa/archive/2011/03/12/1982255.html
下面這個圖是有些嚇人,但是,自己心里有數就是了。
http://dl.iteye.com/upload/attachment/0054/8180/ef4bdd64-81f6-3bdd-8fc3-7943db7c5e0b.png
|