时间复杂度计算

时间复杂度:

时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。

常用方法:

(1) 多数情况下,求最深层循环内的简单语句的重复执行的次数;

(2)当难以精确计算原操作执行的次数时,只需求出它关于n的增长率或阶即可;

(3)当循环次数未知(与输入数据有关),求最坏情况下的简单语句的重复执行操作。

推导大O阶 :

推导大O阶,我们可以按照如下的规则来进行推导,得到的结果就是大O表示法: 

(1)  用常数1来取代运行时间中所有加法常数。 

(2)  修改后的运行次数函数中,只保留最高阶项 

(3)  如果最高阶项存在且不是1,则去除与这个项相乘的常数

 

例子:

//将数组a从小到大排列
void bubble_sort(int a[],int n)
{
 int tmp,change=1;
  for(int i=n-1;i>0&&change==1;i++)
  {
	 change=0;
	 for(int j=0;j<i;j++)
	 {
		 if(a[j]>a[j+1]
		 {
			swap(a[j],a[j+1];
			change=1;
		 }
	 }
  }
}

时间复杂度考虑最坏情况执行得次数为 n*(n+1)/2 次,按照大O推到法则时间复杂度为O(n²)

常见时间复杂度比较:

O(1) 常数阶 < O(㏒ n) 对数阶 < O(n) 线性阶 < O(n㏒ n) < O() 平方阶 < O() < { O(2) < O(n!) < O(n

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值