数据结构(C语言版)算法时间复杂度

本文详细解析了算法的时间复杂度,包括常数阶、线性阶、对数阶及平方阶的定义与计算方法,并通过具体例子展示了如何使用大O阶法评估算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法时间复杂度的推导大O阶法
(1)用常数1取代运行时间中的所有加法常数。
(2)在修改后的运行次数函数中,只保留最高阶数。
(3)如果最高阶顶存在且不是1,则去除与这个项相乘的常数。

事实上,循环的时间复杂度就是循环体的复杂度乘以循环运行的次数。

算法举例:
1、常数阶

int sum = 0,n = 100;
sum = (1+n)*n/2;
printf("%d\n",sum);

f(n)=3,则时间复杂度为O(1)。

2、线性阶

int i,n;
for(i=0;i<n;i++)
{
   时间复杂度为O(1)的操作
}

循环体中共循环了n次,时间复杂度为O(n)

3、对数阶

int count=0,i;
while(count<n)
{
   count=2*count;
   时间复杂度为O(1)的操作
}

分析循环的条件是(count<n),每一次循环count的值就为原来的2倍,相当于一个等比数列。当循环结束时,count=n。此时,假设乘了x个2使得count=n,那么就有2^x=n,解得x=log(2) n,时间复杂度为O(log n)(舍去底数)

4、平方阶

int i,j,n;
for(i=0;i<n;i++)
{
   for(j=i;j<n;j++)
   {
       时间复杂度为O(1)的操作;
   }
}

分析:内层循环随外层循环的改变而改变。
当 i=0 时,j=0,内循环执行 n次;
当 i=1 时,j=1,…(n-1)次;
当 i=2 时,j=2,…(n-2)次;
.
.
.
当 i=n-1 时,j=n-1,…1次;
则总的执行次数为:
n+(n-1)+(n-2)+…+1=(n^2+n)/2
根据推导大O阶的方法,只保留最高阶项并去除常数,所以时间复杂度为O(n^2)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值