【绪论】算法为什么重要?

  最近开始了考研专业课的复习,由于一直以来对数据结构和算法的喜爱,所以在考研复习中希望结合考研复习和之前学习《算法导论》和MIT开放课程学到的知识和自己的一些编程经验写写博客,以达到巩固知识和学习交流的目的。这篇文章就当是绪论吧!
本人也还在象牙塔下学习,实际项目参与的很不多,所以侃侃而谈这个问题脱离现实也有些不切实际,没有说服力。

算法为什么重要?李开复有一篇文章——《算法的力量》(点击打开链接)。《算法导论》的第一张中列举了算法能够解决的问题(本人翻译自英文版,水平有限,^_^):
(1)人类基因组计划的目的之一是识别人类DNA中所有的10万种基因, 确定构成人类DNA的30亿种化学碱基对的顺序,把这些信息存储到数据库中,并开发程序用来做数据分析。这些步骤的每一步都需要尖端的算法支持,来让科学家合理有效地利用资源的同时成功完成任务。节约的不仅是时间,还有人力和机器,还有金钱。
(2)因特网使全世界各地的人可以迅速连接到网络并得到海量的信息。为了实现这个目的,聪明的算法可以用来管理控制如此海量的数据。包括如何选择数据传输的最佳路径,如何使用搜索引擎迅速找到特定信息在网络中存储的位置等等。
(3)电子商务使商品和服务可以虚拟地形式进行协商和交换。而如何保证如信用卡号,密码和银行的声明等信息不被窃取保证隐私非常重要,尤其是再电子商务快速发展的今天。公钥加密算法和数字签名是基于数论和数字算法的核心技术。
(4)在生产及其他商业环境中,如何合理地最大化收益地分配稀缺资源非常重要。在这些情境中,我们可以使用线性规划或动态规划解决问题。
......
如今,云计算的到来丝毫没有降低算法的重要性,现今服务器上存储了PB级的数据,如何安全地稳定地有效地存储、查询、管理数据是各大公司的数据中心首要关心的问题。而小到手中的IPhone,Android手机,华丽的UI和犀利地操作,如果没有高效、快速的算法的支持,冗长的响应时间,动辄的死机将会使它成为噩梦。
前段时间浙江大学ACM/ICPC夺冠的新闻出来,也引起了不小的关注和讨论。有许多人在质疑这些冠军成员整天搞那些玩意儿真正却写不出个成品的XXX系统出来。我想,一,你不认识冠军成员,你如何知道人家不能写出这些XXX系统(不是OS啊)。二,人家已经证明了人家的学习能力,分析问题、解决问题的能力,和毅力决心,就算人家现在不会写个成品出来,给他们一个月,甚至一周的时间,我相信,写出一个差不多的XXX系统并非天大的难事。而潜心学习ACM夺取ICPC冠军对于许多人来说可能不是天大也是很大的难事了吧。
但目前,许多培训学校出来的JAVA、.NET程序员,对编程语言、云云的框架、设计模式、快速开发工具、各种库很是了解,却对计算机的基础理论知识缺乏足够的理解认识。当然,如今强大的库屏蔽了许多数据结构和算法,许多时候只需了解API就够了。但当遇到更大、要求更高的项目时,可能就会遇到技术瓶颈。而不可替代性是你保持竞争力的必要条件,JAVA、.NET程序员多了去了,谁能解决公司的问题,谁不被淘汰的机率就大。毕竟,上层的建筑是建筑在底层的基础之上的,而越往下挖,竞争的人越少,你的不可替代性就越强。有些人自上而下学习,从应用中捕捉问题,深入细节,探索内部实现,有些人自底向上,刨根问底。重要的是保持一颗求知若饥、时刻学习、积极向上的心态,无论是培训班出身,还是科班出身,都能找到自己的用武之地。跑题了跑题了,刹住。
总之,算法总是在最前沿。

下一篇的主题是算法分析,敬请关注。



你可能感兴趣的:(算法)