【算法设计与分析】时间复杂度

1 算法特性:

1 输入
2 输出
3可行性
4有穷性
5 确定性

2 时间复杂度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运算规则:
在这里插入图片描述
按数量级递增排列,常见的时间复杂度函数有:
常数阶O(1)
对数阶O( logn)
线性阶O(n)
线性对数阶O(nlogn)
平方阶O(n2)
立方阶O(n3)
,…,
k次方阶O(nk),
指数阶O(2n)。
随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
特殊时间复杂度:在这里插入图片描述
在这里插入图片描述

log n 比对数阶时间复杂度小,更好

1 递归算法分析
例:求n!

int fac(int n)
{ if(n==0||n==1)       return 1;
   else  return n*fac(n-1);  }

T(n)= 1 n==0或1
T(n)=T(n-1)+1
因此T(n)=T(n-1)+1=T(n-2)+2
=…=T(1)+n-1=n=O(n)

2 折半查找 算法分析

Int BinSe2(int r[], int target, int low, int high)
{ 
   if(low > high) 
   return false; 
   else
   { int mid = (low+high)/2; 
     if(target < r[mid]) 
      return BinSe2(r,target,low,mid-1); 
    else if(target > r[mid]) 
     return BinSe2(r,target,mid+1,high); 
   else return true; 
    } 

在这里插入图片描述

时间复杂度递归方程求解

一 迭代法/Iteration方法
1. 不断用递推方程的右部替换左部
2.每次替换,随着 n 的降低,在和式中多出一项
3.直到出现初值,停止迭代
4.将初值代入并对和式求和
5. 可用数学归纳法验证解的正确性
在这里插入图片描述
例子: 汉诺塔问题

void hanoi(int n,char one,char two,char three) { 
 if(n==1) 
 move(one,three); 
 else 
 { hanoi(n-1,one,three,two); 
    move(one,three); 
    hanoi(n-1,two,one,three);
}
}

在这里插入图片描述
二 Master方法

在这里插入图片描述
第三种情况下,一定要再判断一下是否c存在
在这里插入图片描述
在这里插入图片描述
下面例4 ,就不是多项式的大于
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值