什么是算法的复杂度
(1)算法复杂度即算法所需要的计算机资源
(2)算法的复杂度可分为算法的时间复杂度 T(n)T(n)T(n) 和算法的空间复杂度 S(n)S(n)S(n),其中 nnn 是问题的规模(输入大小)
算法的时间复杂度
时间复杂度就是函数中基本操作所执行的次数,记为T(n)T(n)T(n),可分为:
(1)最坏情况下的时间复杂度:Tmax(n)=max{T(l)∣size(l)=n}T_{max}(n)=max\{T(l)|size(l)=n\}Tmax(n)=max{T(l)∣size(l)=n}
(2)最好情况下的时间复杂度:Tmin(n)=min{T(l)∣size(l)=n}T_{min}(n)=min\{T(l)|size(l)=n\}Tmin(n)=min{T(l)∣size(l)=n}
(3)平均情况下的时间复杂度:Tavg(n)=∑size(I)=np(I)T(I)T_{avg}(n)=\sum\limits_{size(I)=n}p(I)T(I)Tavg(n)=size(I)=n∑p(I)T(I)
其中,III是问题的规模为nnn的实例(或称合法输入),p(I)p(I)p(I)是实例III出现的概率。
算法的空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记为S(n)S(n)S(n),可分为:
(1)程序的保存所需要的存储空间资源。即程序的大小;
(2)程序在执行过程中所需要消耗的存储空间资源,如中间变量等;
时间与空间复杂度的联系
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
算法的渐近时间复杂度
当n→∞n→∞n→∞时,若(T(n)−t(n))/T(n)→0(T(n)-t(n))/T(n)→0(T(n)−t(n))/T(n)→0,则称t(n)t(n)t(n)是T(n)T(n)T(n)的渐近性态,为算法的渐近时间复杂度。在直观上,t(n)t(n)t(n)是T(n)T(n)T(n)略去低阶项留下的主项,它比T(n)T(n)T(n)简单。
复杂度排序:(logn)x<(logn)x+ε<nx<nx+ε<2n<2n+ε(logn)^x<(logn)^{x+ε}<n^x<n^{x+ε}<2^n<2^{n+ε}(logn)x<(logn)x+ε<nx<nx+ε<2n<2n+ε
(1)渐近上界记号O —— 大O表示法
当NNN充分大时,函数t(N)t(N)t(N)有上界g(Ng(Ng(N),即t(N)<=Cg(N)t(N)<= Cg(N)t(N)<=Cg(N),记为t(N)=O(g(N))t(N)=O(g(N))t(N)=O(g(N)),此时,t(N)t(N)t(N)的阶不高于g(N)g(N)g(N)的阶
- 满足大O表示法的c和n0n_0n0的值并不重要,只需要说明存在即可。
- 大O表示法试图给算法的时间代价找到一个最小上界,这个上界的阶越低,则算法评估就越精确,结果就越有价值
- 用低次项(如nnn)的项目替换高次项的项目(如n2n^2n2),直到剩下一个单项为止
举例如下:


(2)渐近下界记号Ω —— 大Ω表示法
当NNN充分大时,函数t(N)t(N)t(N)有下界g(N)g(N)g(N),即t(N)>=Cg(N)t(N)>= Cg(N)t(N)>=Cg(N),记为t(N)=Ω(g(N))t(N)=Ω(g(N))t(N)=Ω(g(N)),此时,t(N)t(N)t(N)的阶不低于g(N)g(N)g(N)的阶
-
满足大Ω表示法的ccc和n0n_0n0的值并不重要,只需要说明存在即可。
-
试图给算法的时间代价找到一个最大下界,因为这个下界的阶越高,则算法评估就越精确,结果就越有价值
-
省略低次项,直到剩下一个单项为止
举例如下:

(3)紧渐近界记号Θ —— Θ表示法
当且仅当t(N)=O(g(N))t(N)= O(g(N))t(N)=O(g(N))且t(N)=Ω(g(N))t(N)=Ω(g(N))t(N)=Ω(g(N))时,有t(N)=Θ(g(N))t(N)= Θ(g(N))t(N)=Θ(g(N)),此时,t(N)t(N)t(N)的阶等于g(N)g(N)g(N)的阶
举例如下:

(4)非紧上界记号o —— 小o表示法
当且仅当t(N)=O(g(N))t(N)= O(g(N))t(N)=O(g(N))且t(N)≠Ω(g(N))t(N) ≠Ω(g(N))t(N)̸=Ω(g(N))时,有t(N)=o(g(N))t(N)= o(g(N))t(N)=o(g(N))。即t(N)t(N)t(N)的阶不高于g(N)g(N)g(N)的阶
问题的下界及最优算法
-
给定充分大的问题规模NNN,对于这个问题的所有算法的复杂性中取相应的下界
-
问题的计算时间下界为Ω(f(N))Ω(f(N))Ω(f(N)),则计算时间复杂性为O(f(N))O(f(N))O(f(N))的算法为最优算法。
算法分析的基本法则
非递归算法:
(1)for/while循环:循环体内计算时间*循环次数。
(2)嵌套循环:循环体内计算时间*所有循环次数。
(3)顺序语句:各语句计算时间相加。
(4)if-else语句:if语句计算时间和else语句计算时间的较大者。
本文介绍了算法的复杂度,包括时间复杂度和空间复杂度的概念,以及它们在最坏、最好和平均情况下的定义。讨论了时间与空间复杂度的联系,并阐述了渐近时间复杂度的意义,如大O、大Ω和Θ表示法。最后提到了问题的下界及最优算法的判断标准。
653

被折叠的 条评论
为什么被折叠?



