第1章 算法设计基础
内容导读


“算法是计算机科学的核心”“没有算法,就没有计算机程序”,很多计算机及相关学科的专家都赋予了算法很高的地位,可见其在整个计算机科学中的重要性。无论是否为计算机相关专业的学生,学习算法都可以培养我们分析问题和解决问题的能力。毕竟,算法可以被看作解决问题的方法,尽管它不是问题的答案,但它是经过准确定义以获得答案的过程。因此,不管是否涉及计算机,特定的算法设计技术都能看作问题求解的有效策略。
实际上,由于算法本身就是源于对现实问题的抽象,因此算法设计技术的应用范围非常广泛,而不仅仅被应用于计算机学科中。例如,“分治算法”不但是计算中常用的算法策略,还是一种兵法策略。在朝鲜战争中,以美军为代表的“联合国军”采用“跳蚤战术”,将志愿军队伍截成一段一段的,首尾不能相顾,试图各个击破,这正是分治策略中的子集划分与求解。然而,擅长“游击战术”的志愿军采用同样的策略,各自为战,积极反击敌人,取得了从局部到全局的胜利,这正好符合分治策略中的求解子集、回溯结果、优化结果集。再如,图论中的关节点问题在军事上也有相关应用实例。三国时期,诸葛亮出祁山攻打魏国时让马谡镇守的街亭,就是军事战略地图中的关节点,它的失守直接导致了蜀军的溃败。此外,关节点问题在电路设计中也有着重要的应用,如动态规划中的电路布线等。算法在很多商业领域同样有着大型的综合应用,如应用于大型网购平台(如Amazon、淘宝等)的分布式算法。在人工智能方面,算法已经取得了很多成果,如IBM公司的“深蓝”、Google公司的AlphaGo和Apple公司的Siri。由此可见,算法影响着我们工作、学习及生活的方方面面,正逐步改变着我们的思维与生活方式。