一、算法的概念
算法是独立存在的一种解决问题的方法和思想
对于算法而言,实现的语言并不重要,重要的是思想
二、算法的五大特性
1、输入:算法具有0个或多个输入
2、输出:算法至少有1个或多个输出
3、有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
4、确定性:算法中的没有一步都有确定的含义,不会出现二义性
5、可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
三、时间频度
一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)
四、时间复杂度与“大O记法”
在时间频度T(n)中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。有时我们想知道他变化时呈现什么规律,为此我们引入时间复杂度的概念。
如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有T(n)<=c*g(n),就说函数g是T(n)函数的一个渐进函数,记为T(n)=O(g(n)),它称为算法的渐进时间复杂度,简称时间复杂度。
大O表示法实际就是去掉T(n)函数的最高阶项系数、低阶项和常数项,只保留最高阶项。
如T(n)函数为2n^3+5n+6,使用大O表示法则时间复杂度为O(n^3)
五、时间复杂度的分类
时间复杂度根据操作的多少分为如下三种:
1、最优时间复杂度:算法完成工作最少需要多少基本操作
2、最坏时间复杂度:算法完成工作最多需要多少基本操作
3、平均时间复杂度:算法完成工作平均需要多少基本操作
六、时间复杂度的几条基本计算规则
1、基本操作,即只有常数项,认为其时间复杂度为O(1)
2、顺序结构,时间复杂度按加法进行计算
3、循环结构,时间复杂度按乘法进行计算
4、分支结构,时间复杂度取最大值
5、判断一个算法的效率时,往往只需要关注操作数量的最高项,其它次要项和常数项可以忽略
6、在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏的时间复杂度
七、空间复杂度
1、空间复杂度的概念
一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度
2、空间复杂度和时间复杂度的关系
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。大部分时间我们在完成有一个程序时采用空间换时间的策略
算法的时间复杂度和空间复杂度合称为算法的复杂度