第1章 算法基础

学习目标

充分理解并掌握算法的相关概念,能够分析一段代码是否具备算法的特征

理解算法设计的一般过程

能够运用算法复杂性分析方法正确估算算法的时间复杂度和空间复杂度

能够运用面向对象程序设计语言C++描述算法

掌握递归的概念,能够辨别递归的停止条件和递归方程

熟悉基本数据结构和数学公式的概念及使用方法

有两种思想,像珠宝商放在天鹅绒上的宝石一样熠熠生辉,一个是微积分,另一个就是算法。微积分以及在微积分基础上建立起来的数学分析体系造就了现代科学,而算法则造就了现代世界。

——David Berlinski之THE ADVENT OF THE ALGORITHM

计算机行业是一个肥沃且充满勃勃生机的生态圈,不断孕育着一代又一代的新技术、新概念,毫无疑问,那些站在科技浪尖的技术概念自然成为开发者的宠儿。纵观计算机行业的发展历程,不难发现无论该行业的浪潮多么朝夕莫测,计算机和软件发展背后的根基却岿然屹立、经年不变,算法便是其根基之一,它对计算机行业的发展起着不可估量的作用。因此,算法在计算机专业教育中占有很重要的地位。对算法的学习和研究主要包括算法设计、算法描述、算法的正确性证明、算法分析和验证等几方面。

另外,算法的设计与分析是计算机专业教育的核心问题,掌握算法的设计策略和算法分析的基本方法是对一个软件工作者的基本要求,为此,本书主要对这两大方面进行研究。设计策略是指面对一个问题,如何设计一个正确有效的算法;算法分析是指对于一个已设计的算法,如何评价其优劣。二者相互依存,设计出的算法需要进行分析和评价,对算法的分析和评价反过来又将推动算法设计的改进。