时间复杂度

参考:一套图搞懂“时间复杂度”

时间复杂度的定义说简单点就是估算一下基本操作的执行次数
然而我就成了知道这个道理却仍然计算不出算法复杂度的。。。媛
看完之后自己进行了一定的总结

归纳最常见的几种:
1.O(1)
根据所参考的博文,其实就是:一个鸡腿吃2天,吃完它需要几天?
答: 2天
tips: 一般情况就是没有循环。直接运行下去这个可计算的次数,就是O(1)了

// Ada
void simple() {
	printf("Hello~");
	
	return 0;
}

2.O(n)
仍然根据参考博文。其实就是,一跟油条能吃10口,2天吃1口,几天能吃完?
答:2 * 10 = 20 天
tips: 这里就是涉及到了最简单的单层循环。没满足条件继续执行内容。条件仅是以单纯的递增或递减方式

// Ada
	for(int i = 0; i < 10; i++) {
		printf("我是咬的第一口~\n");	
		printf("我是咬的第二口~\n");
	}
	

3.O(lognN)
tips: 这里不举例子。主要是每次这里都有点糊涂,看完举的例子后也没豁然开朗。但很明显这里看循环的增长方式。第二个是递增或递减。这里是相乘或相除。也就是递增方式前一个是按照线性方式增长,这里是按照对数方式。放代码直接运算

// Ada
	for(int i = 1; i < 10; i*=2) {
		printf("我是咬的第一口~\n");	
		printf("我是咬的第二口~\n");
	}

** 设总运行次数是k.则2k = 10; 即 k = log210;

4.O(n2)
tips: 这里就是二重循环了。二重循环就会得到次数相乘的形式。因为外层每累加一次,内层就循环自身全部次数

// Ada
	for(int i = 0; i < 10; i ++) {
		for(int j = 0; j < 3; j++) {
			printf("我是咬的第一口~\n");	
			printf("我是咬的第二口~\n");		
		}
	}

** 设总次数k次,外层10次,每外层一次内层就3次,因此总次数是10 * 3 = 30次

4.O(nlog2n)
tips: 其实就是二重循环,一层的改变方式是乘,得到log。另一层的改变方式是加,得到n

// Ada
	for(int i = 0; i < 10; i *= 2) {
		for(int j = 0; j < 3; j++) {
			printf("我是咬的第一口~\n");	
			printf("我是咬的第二口~\n");		
		}
	}

** 设总次数k次,外层log210次,每外层一次内层就3次,因此总次数是log210 * 3 次
总结
不循环,O(1)
单层加减O(n)来
仍单层,换乘除,时刻记得O(logN)
两层循环没话说 次数相乘会出现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值