青少年编程知识记录 codecoming

如何估算时间复杂度

首先:

  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)

时间复杂度可以简单理解为最多执行次数。



一、O(1)

一般情况下没有其他循环和递归调用,时间复杂度一般都是O(1)。比如下面这样的代码

#include<iostream>  using namespace std;  int main(){  	int a=0,b=0,x=0,y=0;  	cin>>a>>b;  	x=a+b;  	y=a-b;  	if(x>y){  	 cout<<x;  	}else{  	 cout<<y;  	}  	return 0;  }

二、O(n)

一般情况下,一个循环的时间复杂度是O(n),多个循环并列也是取循环次数最多的那个作为时间复杂度。当数据量增大n倍,耗时增大n倍。

#include<iostream>  using namespace std;  int main(){  	int a=n;  	cin>>n;  	for(int i=0;i<n;i++){  	    cout<<i;  	}  	return 0;  }



三、O(n2)、O(n*m)

双重循环嵌套一般就是O(n2)。当数据量增大n倍,耗时增大n方倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	    for(int j=0;j<n;j++){  	        cout<<i;  	    }  	}  	return 0;  }

如果循环嵌套外层循环是n,内层循环是m。

#include<iostream>  using namespace std;  int main(){  	int n=0,m=0;  	cin>>n>>m;  	for(int i=0;i<n;i++){  	    for(int j=0;j<m;j++){  	        cout<<i;  	    }  	}  	return 0;  }

这个时候的时间复杂度是O(n*m)。



四、O(logn)

当数据增大n倍时,耗时增大logn倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	   i*=2;  	   cout<<i;  	}  	return 0;  }

本来循环次数是n,现在i*=2了。那么答案是log(2)(n)。

反着想也可以,原来循环n次,现在每次i变成原来的2倍,也就是2的k次方等于n。那么正好就是log(2)(n),即O(log n)



或者下面这样:

#include<iostream>using namespace std;  int main(){  int n=0;  cin>>n;  while((n=n/2)>0){      cout<<n;  }   return 0;  }

时间复杂度也是O(logn)



五、O(nlogn)

一般归并排序和堆排序是O(nlogn)。 

常见的是外层循环的时间复杂度是n,内层循环的时间复杂度是logn。

比如下面这样:

for(int i=1; i<=n; i++)  {  	for(int j=1; j<=n; j+=i)  	{  		.....   //复杂度为O(1);  	}  }

注意:外层循环是n,内层循环j每次都增加i。

作者:亿万年的星光 分类:C++知识 浏览:

指针(三):指针与函数

1.交换的例子#include<iostream> #include<cstdio> #include<cstring> using namespace std; void swap(int x, int y){ int a=x; x=y; y=a; cout<<"函数内部"<<x<<" &q
作者:亿万年的星光 分类:C++知识 浏览:

指针(二):指针与数组

1.指针与数组的关系    指向数组的指针变量称为数组指针变量。“数组是内存上一块连续的空间”。数组名就是这块连续空间的首地址。2.指针指向数组    一开始的数组定义与输出:#include<iostream> #include<cstdio> using namespace std; int main(){ int a[10]; for(int 
作者:亿万年的星光 分类:C++知识 浏览:

指针(一):基础用法

1.定义什么是指针,简单来说:“指针就是地址”。2.指针变量的定义指针变量定义形式:  类型说明符  *变量名其中,*号表示指针变量。变量名即为定义的指针变量名,类型说明符表示该指针变量所指向的变量的数据类型。普通变量:int a=5;解释:定义了变量a,是int型的,值为5。内存中有一块内存空间是放a的值。对a的存取操作就是直接到这个内存空间存取。内存空间的位置叫地址,存放5的地址可以用取地址操作。用“&”符号运算得到。即&a;指针变量:int *p=NUL
作者:亿万年的星光 分类:C++知识 浏览:

【python】如何利用python生成二维码

0.前言二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用python来生成二维码、以及识别二维码。关于二维码,我们来说一下它的结构。从图中我们可以看出二维码结构整体划分为功能图形和编码区两大部分,功能图形又细分为:空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形,而编码区细分为:格式信息、版本信息、数据和纠错码字,来简单了解一下每一部分的功能:空白区:留白,不需要做任何处理位置探测图形:协助扫描软件定位二维码码位置
作者:亿万年的星光 分类:python知识 浏览:

【题解】母牛的故事

【题目描述】

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

【输入描述】

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。

n=0表示输入数据的结束,不做处理。

【输出描述】

对于每个测试实例,输出在第n年的时候母牛的数量。

每个输出占一行

【样例输入】

2  4  5  0

【样例输出】

2  4  6
作者:亿万年的星光 分类:题解目录 浏览:

C++报错:[Error] ld returned 1 exit status

一般遇到[Error] ld returned 1 exit status报错。原因一般有两个,第一个,main函数写错,main写mian的很多。改正即可。第二个,你的DEVC++已经运行了一个exe程序,现在想运行第二个,也会报这个错错误。解决办法就是把运行的exe关掉即可。
作者:亿万年的星光 分类:常见报错 浏览:

【python】常见内置函数及用法汇总

函数名释义说明示例abs()绝对值函数求一个数的绝对值all()any()bin()二进制函数将一个十进制的数转换成二进制bool布尔函数

标签: python函数

作者:亿万年的星光 分类:python知识 浏览:

判断闰年

代码参考:#include<iostream>  using namespace std; //判断闰年的函数  int leap(int year){ if((year%4!=0)||(year%100==0&&year%400!=0)) return 0;  //0表示是平年 else return 1; //1表示是闰年 }

标签: 闰年

作者:亿万年的星光 分类:C++知识 浏览: