为什么我们需要数学
买菜的大妈可能很难理解数学的好处,只要简单的加减乘除就可以了,为什么还要让自家娃学习那么复杂的数学!三角函数,二元一次方程,微积分,数论,这些到底能有什么用处啊?!以前我也不理解这个问题,后来上学直到后来工作,才逐渐发现,数学实在是太有用了。
因为有三个魔鬼,所以怎么都无法脱离数学。本来看着挺简单的事情,遇到这三个魔鬼,难度立刻指数形式增长。一个叫自动化,另外一个叫优化,还有一个是终极boss:证明。
自动化
让人类区分苹果和西红柿,那简单的不得了。但是让机器去处理,就变得异常复杂。即使能够准确的采集两种水果的图片信息,但还要确定选择哪些较好的特征,确定特征后还要建立模型,判断先验概率和条件概率的形式,以及对应的参数,还要计算错误代价。最后最好能建立反馈,修改参数,调整分类器设计。这每一步,都需要惊人复杂的概率论知识,公式推导让人眼花缭乱。
网页爬虫做起来并不复杂,是程序员入门编程时的有趣课题。可是,让计算机发现网页中“有用的数据”,并将其分割抓取下来就变得异常复杂了。这里需要分析数据的格式,出现的模式,如何翻页,如何防反爬虫,如何去广告,复杂极了。
乃至于发现ABCABCABC这样的规律,人眼一眼就看出来了。但机器却做不到。更何况那个经典的例子:让机器的手去抓鸡蛋。最难的可能并不是开发一个程序让机器抓鸡蛋,而是如何让机器学习抓鸡蛋的方法...
优化
另外一个魔鬼叫优化。本来给出一个问题的解答并不复杂,然而更好的解答却需要成倍的努力。比如想去七个国家旅游,不同时间段内的机票价格都不一样,起飞时间,景点门票价格都会有波动,想找出一条最好的方案,那会是几十个参数同时优化的复杂问题。
一个仓库存多少货,仓储成本比较低,能够较快响应调货需求,这都容易解决。但如果是分布在全国的不同仓库,物流,存储成本,不同地域的价格差,消费者需求量,想找到一个尽可能好的方案需要大量的计算。
即使是最简单的例子,一个老农想让自己的收益最大化,到底该怎么分配西红柿和黄瓜的种植比例,都需要二元线性规划。
优化是个无底洞,做过代码优化的人都知道,最难的不在于找到最优解,而是最优解只是多个因素权衡之后的结果,合理的策略和洞见,比数值的计算更重要。
证明
如果前面两者已经让你退却了,那最终的boss更是难以撼动,证明!在面试时给出一个方案,似乎挺完美,但面试官提出一个问题,你如何证明它是最优的?马上头上就沁出滴滴汗珠。
证明要给出严谨的推导,或者构造巧妙的结构,或者有趣的反证,或是逐步推进的数学归纳。如何证明1+1=2? 如何证明nlogn是排序的性能上界?如何证明某种魔方旋转方法是步骤最少的?让我晕一会。
结语
从上面的讨论,我们能到的两个有益的启发。解决问题并不难,难的是更好的解决问题。其中的区别,很大程度的区别来自于数学和思维能力。所以有机会还是多看看数学吧。
从另外一个角度,如果想把产品推向市场,虽然“做到极致”是很多人的口头禅,但是这也会付出上百倍的代价。如何在最短时间内给出一个近似完美的方案,这也是一个有趣的“优化”问题,不要让自己的精力浪费在确实复杂但对最终结果帮助不大的因素上。
推荐程序员看《具体数学》,直接看英文版,啃下来之后,编程功力提升两个档次。
作者:热情的沙漠
出处:http://www.cnblogs.com/buptzym/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。