一、算法的复杂性分析
算法复杂性是算法运行所需的计算机资源量
1.需要的时间资源的量称为时间复杂性,
2.需要的空间资源的量称为空间复杂性,
(代表问题的规模,
代表输入(实例))
1.时间复杂性是输入为时的跟规模
相关的算法运行时间增长率
2.空间复杂性是输入为时的跟规模
相关的算法运行空间增长率
二、渐近意义下的记号含义:O、Ω、θ、o、ω
1.渐近上界记号 O(O,/əʊ/,大Oh):定义了算法的上界,O只定义上界,只要f(n)不大于上界g(n),就可以说 f(n)=O(g(n))。
2.非紧渐近上界 o(o,/əʊ/,小oh):定义的也是算法的上界,不过它不包含等于,是一种不精确的上界,或者称作松上界(某些书籍翻译为非紧上界),o表示仅仅是大O去掉等于的情况,其他行为与大O一模一样。
3.渐近下界记号 Ω(Ω,/oʊˈmeɡə/,大Omega):定义了算法的下界,Ω只定义下界,只要f(n)不小于下界g(n),就可以说 f(n)=Ω(g(n))。
4.非紧渐近下界 ω(ω,/oʊˈmeɡə/,小omega):定义的也是算法的下界,不过它不包含等于,是一种不精确的下界,或者称作松下界(某些书籍翻译为非紧下界)。ω表示仅仅是大Ω去掉等于的情况,其他行为与大Ω一模一样。
5.渐近紧确记号 Θ(Θ,/ˈθiːtə/,theta):定义了一种精确的渐近行为,Θ同时定义了上界和下界,f(n)位于上界和下界之间,且包含等号。
三、渐近意义下的记号作用:O、Ω、θ、o、ω
1.渐近上界记号 O
假设:是定义在正数集上的正函数;
为算法的时间复杂性;
为算法最坏的时间复杂性;
为算法最好的时间复杂性;
是数据规模。
若:
含义:算法在任何实例情况下,其时间复杂性的阶不超过上界的阶,它的时间复杂性的阶要小于等于上界
的阶。
即:,c为常数
例如:;
;
故:
2.非紧渐近上界 o
假设:是定义在正数集上的正函数;
为算法的时间复杂性;
为算法最坏的时间复杂性;
为算法最好的时间复杂性;
是数据规模。
若:
含义:算法在任何实例情况下,其时间复杂性的阶小于上界的阶,它的时间复杂性的阶要小于上界
的阶。
即:
例如:;
;
故:
3.渐近下界记号 Ω
假设:是定义在正数集上的正函数;
为算法的时间复杂性;
为算法最坏的时间复杂性;
为算法最好的时间复杂性;
是数据规模。
若:
含义:算法在任何实例情况下,其时间复杂性的阶不低于下界的阶,它的时间复杂性的阶要大于等于下界
的阶。
即:,c为常数
例如:;
;
故:
4.非紧渐近下界 ω
假设:是定义在正数集上的正函数;
为算法的时间复杂性;
为算法最坏的时间复杂性;
为算法最好的时间复杂性;
是数据规模。
若:
含义:算法在任何实例情况下,其时间复杂性的阶大于下界的阶,它的时间复杂性的阶要大于下界
的阶。
即:
例如:;
;
故:
5.渐近紧确记号 Θ
假设:是定义在正数集上的正函数;
为算法的时间复杂性;
为算法最坏的时间复杂性;
为算法最好的时间复杂性;
是数据规模。
含义:算法在任何实例情况下,其时间复杂性的上界和下界的阶相等,都是。
例如:有一个算法A:最坏情况:
最好情况:
存在,有
和
则:
故: