算法时间复杂度的一点点理解

1. 时间频度用T(n)表示,表示当一个程序,其中某个变量n,他的值是n时,执行的语句/命令的次数。比如T(n)=3n^{^{2}}+2n+1。n表示问题规模,可以理解为一个算法,一个函数或程序的输入参数。具体可以理解为程序的循环次数。

时间复杂度用O(f(n))表示,f(n)是一个辅助函数,随着n值增大,与T(n)比值接近常数的函数。比如f(n) = n^{^{2}}

此时,时间复杂度可以用O(n^{^{2}})表示,表示随着代码中变量n的值逐渐增大时,他需要执行的命令的条数无线接近n2,消耗的时间也无线接近O(n^{^{2}})

2.在计算时间复杂度时,比如T(n)=3n^{^{2}}+2n+1 ,随着n的值增大,公式中的常数项(1),低次阶2n,以及高次阶3n^{^{2}}的系数3都可以忽略,所以该算法的时间复杂度时O(n^{^{2}})。

3. 常见的算法复杂度有

常数阶O(1),对数阶O(logn),线性阶O(n),对数线性阶nO(logn),平方阶O(n^{^{2}}),立方阶,2^{n}阶等。(这里的logn是以2为底,n的对数,底数可以根据实际情况可能是2,3,4...)。以上算法时间复杂度从低到高排序。

4. 算法复杂度举例

常数阶:没有循环的程序,即使有几万行代码,那么时间复杂度也是O(1)

对数阶:

int i = 1;
while(i<n){
    i = i*2;
}

线性阶:

for(int i=1;i<n;i++){
    ...
    ...
}

线性对数阶:

for(int i=0;i<n;i++){
    int i = 1;
    while(i<n){
        i = i*2;
    }
}

2次平方阶:就是两个for循环,3次平方阶就是3个for循环。

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

}

5. 总结:

某个程序或者函数(输入变量或者参数是n)时间复杂度跟循环次数有关,循环一次,是O(n^{0}),即O(1),循环n次,就是O(n),即线性阶。如果循环n^{^{2}},就是O(n^{^{2}}),平方阶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值