算法分析
在很多情况下,描述一个算法的运行时间是有用的,为此,需要定义一套统一的算法渐进记号来合适的描述算法的运行效率。然后我们通过各种方法对不同的算法运行效率进行分析。
算法时间复杂度记号
Θ Θ 渐进紧确界
定义一:设 f(n) f ( n ) 和 g(n) g ( n ) 是定义域为自然数集合的函数。如果 limn→∞f(n)g(n) lim n → ∞ f ( n ) g ( n ) 存在,并且等于某个常数 c(c>0) c ( c > 0 ) ,那么 f(n)=Θ(g(n)) f ( n ) = Θ ( g ( n ) ) 。通俗理解为 f(n) f ( n ) 和 g(n) g ( n ) 同阶, Θ Θ 用来表示算法的精确阶。
定义二:若存在正常量 c1 c 1 、 c2 c 2 ,使得对于足够大的 n n ,函数 能“夹入” c1g(n) c 1 g ( n ) 与 c2g(n) c 2 g ( n ) 之间,则 f(n) f ( n ) 属于集合 Θ(g(n)) Θ ( g ( n ) ) ,记作 f(n)∈Θ(g(n)) f ( n ) ∈ Θ ( g ( n ) ) 。作为代替,我们通常记“ f(n)=Θ(g(n)) f ( n ) = Θ ( g ( n ) ) ”。
O O 渐进上界
定义:设 和 g(n) g ( n ) 是定义域为自然数集 N N 上的函数。若存在正数 和 n0 n 0 ,使得对一切 n≥n0 n ≥ n 0 都有 0≤f(n)≤cg(n) 0 ≤ f ( n ) ≤ c g ( n ) 成立,则称 f(n) f ( n ) 的渐进的上界是 g(n) g ( n ) ,记作 f(n)=O(g(n)) f ( n ) = O ( g ( n ) ) 。通俗的说n满足一定条件范围内,函数 f(n) f ( n ) 的阶不高于函数 g(n) g ( n ) 。
O(g(n))={ f(n):∃c,n0,∀n≥n0,0≤f(n)≤cg(n)} O ( g ( n ) ) = { f ( n ) : ∃ c , n 0 , ∀ n ≥ n 0 , 0 ≤ f ( n ) ≤ c g ( n ) }例如:设 f(n)=n2+n f ( n ) = n 2 + n ,则
f(n)=O(n2) f ( n ) = O ( n 2 ) ,取 c=2 c = 2 , n0=1 n 0 = 1 即可
f(n)=O(n3) f ( n ) = O ( n 3 ) ,取 c=1 c = 1 , n0=2 n 0 = 2 即可。显然,O(n^2)作为上界更为精确。o o 非渐进紧确上界
定义1:设 和 g(n) g ( n ) 是定义域为自然数集N上的函数。若对于任意正数 c c ,都存在 ,使得对一切 n≥n0 n ≥ n 0 都有 0≤f(n)<cg(n) 0 ≤ f ( n ) < c g ( n ) 成立,则称 f(n) f ( n ) 的渐进的非紧确上界是 g(n) g ( n ) ,记作 f(n)=o(g(n)) f ( n ) = o ( g ( n ) ) 。通俗的说 n n 满足一定条件范围内,函数