算法复杂度

算法复杂度

算法复杂度分为 时间复杂度算法复杂度 。顾名思义,时间复杂度就是计算一段程序运行时间。而空间复杂度则是计算程序的存储空间。
如今,大多数情况下我们只是去考虑时间复杂度

时间复杂度分类

1.常数

若对于一个算法,的上界与输入大小无关,则称其具有常数时间,记作时间O(1)

int a=0;
system.out.println("123213");

上述语句无论执行多少次。它消耗的时间,不随变量增长而增长。哪怕执行几十万行,都可以用**O(1)**来表示它的时间复杂度。

2.对数

若算法的T(n) =O(logn),则称其具有对数时间。由于计算机使用二进制的记数系统,对数常常以2为底(即log2n,有时写作lgn)。然而,由对数的换底公式,logan和logbn只有一个常数因子不同,这个因子在大O记法中被丢弃。因此记作O(logn),而不论对数的底是多少,是对数时间算法的标准记法。

什么是对数?

N = a^x(a 的 x 次方);x=Logan (x以a为底 N的对数)。a成为底数 ,N成为真数

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

上述代码 每次循环相当于不断成以2. 当i大于n时,循环结束。可以转换为 n=2^x; => x = log2n => 舍弃常熟因子。 时间复杂度就是 O(logn)

3.线性

如果一个算法的时间复杂度为O(n),则称这个算法具有线性时间,或O(n)时间。非正式地说,这意味着对于足够大的输入,运行时间增加的大小与输入成线性关系。

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

上述代码,随着n的变化运行时间会成一个线性的增长.时间复杂度O(n)

4.线性对数

若一个算法时间复杂度T(n) = O(nlog n),则称这个算法具有线性对数时间。

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

上述代码,里层是 O(Logn);外层也要循环n次,这就是 O(n Logn)

。。。待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值