竞赛基础|复杂度分析

1.复杂度的定义:

复杂度:复杂度程序运行时间数据规模 增长而产生的变化趋势;

常见的复杂度(x轴为数据规模,y轴为程序运行时间):

常见复杂度大小关系:

O(1)<O(log2n)<O(sqrt(n))<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)

2.如何从推出程序的复杂度

比如:

for(i=0;i*i<n;i++)
{
    ....
}

设for语句执行次数为k,for每次执行时间为t,然后从程序可以看出数据规模为n;

i*i<n即i<根号n,也就是说for语句执行次数大概为根号n,即k约等于根号n,那么程序运行时间约为sqrt(n)*t,也就是这段程序的复杂度为O(sqrt(n))

3.常见复杂度

常数阶:O(1)(程序中不包含循环及递归)

线性阶:O(n)

平方阶:O(n∗n)

对数阶:O(log2n)

根号阶:O(√n)

O(n∗(n+m))

并列语句的执行趋势是相加的
包含语句的执行趋势是相乘的
但如果m改为n那么O(n∗n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值