数据结构 + 算法 = 程序
没有最好的算法,只有最适合的算法;
什么是算法
算法是利用计算机解决问题的处理步骤,简而言之,算法就是解决问题的步骤。
为什么要学习算法
学习算法的同时能提高自己的编程能力。一个好的算法是编写程序的模型,因为它能创造计算机程序,其中还包含了程序的精髓。学过算法的人写出的程序和没学过算法的人写出的程序有明显的差距。要写出既能正确执行又能提高效率的好程序,算法的学习是不可或缺的。算法的学习类似于学习游戏攻略,有了攻略就能轻松取得游戏的成功。
算法五大特征
一个算法应该具有以下五个重要的特征:
有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
确切性(Definiteness)
算法的每一步骤必须有确切的定义;
输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
简单概括算法
- 算法五个特性: 有穷性、确定性、可行性、输入、输出。
- 算法设计要求:正确性、可读性、健壮性、高效率与低存储量需求。(好的算法)。
- 算法的描述有伪程序、流程图、N-S结构图等。E-R图是实体联系模型,不是程序的描述方式。
- 设计算法在执行时间时需要考虑:算法选用的规模、问题的规模。
- 时间复杂度:算法的执行时间与原操作执行次数之和成正比。时间复杂度有小到大:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(n3)。幂次时间复杂度有小到大O(2n)、O(n!)、O(nn)。
- 空间复杂度:若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。