那就给大家提供点学数学的动力吧--编程中用到的数学

g9yuayon 2003-12-14 02:12:55
首先,俺假设同志们不满足于仅仅使用现成的算法。而如果俺们想做点新的东西话,迟早要用到数学。

就不说理论基础了。当然理论基础是很重要的,不然俺们怎么知道:0. 你的问题描述是正确的,清晰的,具有普遍意义的(如果可能的话);1. 算法解决的是你想解决的问题;2. 算法是正确的; 3. 算法的效率; 4. 算法有没有改进的余地?

俺就挂一漏万地说说对算法设计直接有用的数学吧(不包括数学和统计软件):

统计和概率论。这大概是最实用的数学之一,应用之广泛,少有出其右者。先举几个有趣的例子:MS Office里的回形针的学习和答问功能就用到了Bayesian Networks。<a href='http://www.paulgraham.com'>Paul Graham</a>, Common Lisp的狂热支持者,Yahoo! Store(用Lisp写的)的作者,刚做了个非常有效的垃圾邮件过滤器,也用到了Bayesian theory。另外,人工智能里的机器学习,基本上就是统计和概率的有效应用。千万别觉得这个领域与实际无关。想想游戏里NPC的智能,模式识别程序的改进,图形图像的处理,服务器的自我修复(IBM不正大力倡导所谓的自主计算么?),数据的挖掘,用处大了。除开人工智能,统计和概率在系统模拟,网络优化,分布计算,现在方兴未艾的格点计算等方面不可或缺。而且关键是,这些方面的编程和数学紧密结合,不是说用开发好的包裹就够了的。

数理逻辑+代数。呵呵,代数常被用来处理数理逻辑,就放在一块儿说了吧。毋庸质疑,逻辑是计算机科学的基础。但俺今天不谈基础,只谈应用。:D。逻辑最广泛的应用之一是所谓的模型检查。模型检查的概念很简单:一个大型系统的实现与它的建模息息相关。往往最昂贵的错误发生在建模阶段。那么,能不能用高阶的语言描述一个系统(比如用UML),然后检查这个模型是否正确的呢?模型检查应用也相当广泛。通信协议,硬件逻辑,并行软件,大型系统的重要模块,实时系统,都可以被检查。实际上,IBM,Intel, Microsoft, HP, Simens, NASA,Lockheel等大型公司或机构都在广泛使用和研究模型检查。问题是,你怎么描述要检查的条件,还有就是怎么去检查?于是,时序逻辑就粉墨登场乐。简单说,时序逻辑能讲时态引入了逻辑,能描述诸如“当请求发生,将来系统必有回应”或“任何时候数据包都不能丢失”一类的条件。那怎么去检查这些条件呢?于是,u-calculus, 格点理论,群论,自动机理论,布尔代数, 游戏理论等就能大显身手了。请注意,这些数学不是仅仅用来证明和描述问题的。这些理论对设计相关算法必不可少。当然,人工智能的基础就是逻辑,俺也不必多说。

线性代数/微积分。呵呵,不用俺多说,图形图像处理,视觉仿真,加密解密,数据处理(比如压缩),都少不了它们。

关系代数。单独那出来讲,是因为数据库实在是一个单独的类别。如果你想优化查询,数据库关系验证什么的,自然少不了关系代数。


千万别以为这些是科学家和研究人员的事。IBM里的系统方面的STSM(senior staff technical member),Fellow们,都要设计自己的算法,解决没人解决过的问题。到了那时候,理论的作用自然幛显出来。那些牛人平时可都要看论文的。而那些论文可都形式化得厉害。:-)

对了,编译器前台其实是数学和编程结合的经典范例。不过编译器前台好像已经被研究透了,compiler-compiler随处可见,那用到的自动机理论,语意逻辑什么的不提也罢。
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tass 2003-12-16
  • 打赏
  • 举报
回复
up
geeksky 2003-12-14
  • 打赏
  • 举报
回复
离散数学呀,这个很有用的

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧