算法时间复杂度

一,概念:

算法: 解决问题的简单指令的集合,比如排序就有很多种,虽然作用相同,但在过程中消耗的资源和时间却会有很大的区别。因而对一种算法分析它的时间复杂度是非常重要的。
时间维度: 执行当前算法所消耗的时间,即 时间复杂度。
表示形式: 算法的时间复杂度通常用 大 O 符 号 大O符号 O表述, T [ n ] = O ( f ( n ) ) T[n] = O(f(n)) T[n]=O(f(n)) 。其含义为 T ( n ) T(n) T(n)受限于 f ( n ) f(n) f(n),即当 n n n趋近于无穷时, T ( n ) &lt; = f ( n ) T(n)&lt;=f(n) T(n)<=f(n),可以类比理解为数学中的无穷小,即 T ( n ) T(n) T(n)是比 f ( n ) f(n) f(n)高阶的无穷小量,或者两者为同阶无穷小,但不是说它们是无穷小量,只是为了更好地理解。除此之外,还有 小 o 符 号 、 Θ 符 号 , Ω 符 号 , 小o符号、Θ符号,Ω符号, oΘΩ也可类比理解为,高阶无穷小,同阶无穷小,低阶无穷小。

二,计算方法:
  1. 若 T 1 ( n ) = O ( f ( n ) ) , T 2 = O ( g ( n ) ) , 则 有 若T1(n)=O(f(n)),T2=O(g(n)),则有 T1(n)=O(f(n)),T2=O(g(n)),
  • T 1 ( n ) + T 2 ( n ) = O ( f ( n ) + g ( n ) ) T1(n)+T2(n)=O(f(n)+g(n)) T1(n)+T2(n)=O(f(n)+g(n))
  • T 1 ( n ) ∗ T 2 ( n ) = O ( f ( n ) ∗ g ( n ) ) T1(n)*T2(n)=O(f(n)*g(n)) T1(n)T2(n)=O(f(n)g(n))
  1. 如果 T ( n ) 是 一 个 k 次 多 项 式 , 则 T ( n ) = O ( N k ) T(n)是一个k次多项式,则T (n)=O(N^k) TnkTn=ONk,也就是说在计算时间复杂度时,是比较粗略的(忽略低次项和系数),只考虑最高次,但已足够。
  2. 常见的算法时间复杂度由小到大依次为:
       O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < … < O ( 2 n ) < O ( n ! ) Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!) O(1)O(log2n)O(n)O(nlog2n)O(n2)O(n3)O(2n)O(n!)
  3. 一般来说,普通的赋值语句,普通加法乘法(无循环,递归等),都是 O ( 1 ) ; O(1); O1
    一次循环— O ( n ) O(n) On,2个循环嵌套— O ( n 2 ) O(n^2) On2 … … …… k k k 个循环嵌套— O ( n k ) ; O(n^k); Onk;
    一般来说,折半查找,二分法,欧几里得算法等这些 以 2 倍数缩减搜索范围(需要经过 log2^n 次执行完) 的算法,通常为 O ( l o g 2 n ) ; Ο(log2n); O(log2n);
  4. O ( n l o g 2 n ) O(nlog2n) O(nlog2n)通常是 O ( l o g 2 n ) Ο(log2n) O(log2n)的变形,也就是说在它的基础上更改了一些细节,
    如:时间复杂度为 O ( l o g n ) O(logn) O(logn)的代码循环 n n n遍,则它的时间复杂度为 n ∗ O ( l o g n ) n*O(logn) nO(logn),即 O ( n l o g n ) 。 O(nlogn)。 O(nlogn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值