为什么学习算法
为什么学习算法?
学习算法可以了解计算机领域的中不同问题的一系列标准算法,具备设计新算法和分析其效率的能力。对算法的研究是计算机科学的基石。
算法是用来获得答案的过程。
特定的算法设计技术能看作是问题求解的有效策略。算法思想天生固有的精确性限制了它所能够解决的问题种类。
1.1节开始遭受设计算法的概念,作为例子,我们将针对同一问题(求最大公约数)使用3种不同的算法。它揭示了一格重要的观点:不同的算法能够解决相同的问题。非常具有代表性的是,这些算法的解题思路不同,复杂程度不同,解题效率也不相同。第三,其中一个算法应当作为本书介绍的第一个算法,不仅因为它的悠久历史,还因为它不朽的力量和重要性。通过求最大公约数的步骤,着重指出每一个算法都必须满足的严格要求。
1.2节讲述算法问题求解。讨论有关算法设计和分析的一些重要内容。内容涉及算法问题求解的不同方面,包括问题的分析,如何表述算法来证明其正确性以及算法的效率分析。
1.3节讨论集中问题类型,经验证明,这些类型是实际应用种最常遇到的,本书从头到尾都会用它们来演示一些特殊的算法设计技术。
1.4节对基本的数据结构做了一番回顾。
小结
- “算法”是在有限的时间内,对问题求解的一个清晰的指令序列。算法的输入确定了该算法求解问题的一个实例。
- 算法可以用自然语言或者伪代码来详细描述,也可以用计算机程序的方式实现。
- 在对算法进行分类的各种方法中,最主要的两种方法是:
- 按照求解问题的类型对算法进行分组
- 按照其内在的设计技术对算法进行分组
- 重要的问题类型包括:排序,查找,串处理,图问题,组合问题,几何问题和数值问题
- “算法设计技术”(也称“策略”或者“范例”)是用算法解题的一般性方法,适用于解决不同计算领域的多种问题。
- 虽然设计算法无疑是一种创造性的工作,但我们仍然能够确立一系列涉及这一过程的相互关联的活动。上图对它们进行了总结。
- 一个好的算法常常是不懈努力和反复修正的结果。
- 解决同一个问题的算法常常有好几种。
- 算法操作的是数据。这使得数据结构称为算法解题效率的关键因素。最重要的基本数据结构是“数组”和“链表”。它们可以用来表示一些更抽象的数据结构,比如:“线性表”,“栈”,“队列”,“图”(通过图的“邻接矩阵”或者“邻接链表”),“二叉树”以及“集合”。
- 一个表示数据项的抽象对象集合和一系列对这些对象所做的操作合称“抽象数据类型”(ADT)。“线性表”,“栈”,“队列”,“优先队列”以及“字典”都是抽象数据类型的重要例子。现代面向对象语言用类的方式支持ADT的实现。