出于兴趣,出于工作,一直很努力地看数学,可是,骨头难啃啊。这几天工作需要看了下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
|