您的位置:首页 > 其它

算法 渐进 大θ定理 / 实例分析

2017-12-07 04:30 405 查看
定义:f(n)=O(g(n))成立 <-> 有自然数c与n0 使得对于所有n>n0的时候有f(n)< c*g(n)

常规函数的O, Ω,θ均是本身

[线性函数分析] f(n) = 3n+2 利用定义方法证明时间复杂度 = O(n)

f(n) = 3n+2 < 4n 在n>2的时候成立
因此 f(n) 的时间复杂度 = 4n的时间复杂度 = O(n)


[平方函数分析] f(n) =10n^2 + 4n+2

同样的 f(n)= 10n^2 + 4n+2 < 11n^2 在n>5的时候成立
因此 f(n)的时间复杂度 = 11n^2的时间复杂度 = O(n^2)


为什么说最高次项就决定了时间复杂度 -> 自己想想

定理2-7 对于任何实数x>0 以及任何一个实数 e>0,以下都是成立的

//以下x与e均是常数,n是变量

(1). (log n)^x < (log n)^x+e   -> 因为log是单增函数

(2). (log n)^x < n  -> 根据增长率可得成立

(3).  n^x < n^x+e    -> n是单增函数

(4).  n^x * (log n)^e < n^x+e

(5).  n^x < 2^n      ->指数函数的性质


例题 - θ值分析

(1). n^3 + n^2 * log(n) < 2n^3 = O(n^3)
n^3 + n^2 * log(n) > n^3  = Ω(n^3)   =>  θ(n^3)

(2). 2^n / n^2 > n^k / n^2 = Ω(n^k)
为什么对于任何k均成立,因为2^n大的 大于任何n^k都是成立的

(3). n^4 + (n^2.5) * (log n)^20 <2n^4 =>因为log n无论多少次方都小于n
n^4 + (n^2.5) * (log n)^20 >n^4 => θ(n^4)


常用求和对应渐进



于有序数组中寻找某个元素 -> 折半查找

template<class T>
int BinarySearch(T a[], const T& x, int n){
int left = 0; int right = n-1 ;
while (left <= right) {
int middle = (left + right)/2;
if (x == a[middle]) return middle;
if (x > a[middle]) left = middle + 1;
else right = middle-1 ;
}
return -1;


while的每次循环都会将搜寻范围减半

最坏假设执行m次,2^m = n -> m=log n = θ(log n)

附议:常规函数与log函数的O 以及 θ 均是本身

只是循环就一次耗时θ(log n),此外每次循环里面有1步要走

时间复杂性,仅仅考虑s/e步数,其他不考虑

因此总的时间复杂性 = θ(log n) * θ(1) = θ(log n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: