时间复杂度表示:O(里面填时间复杂度)
各种常见的时间复杂度(n为数据规模)
O(1)常量时间复杂度
如
int a,b;
cin>>a>>b;
cout<<a+b;
O(n)线性时间复杂度
如
int a,b;
int ans=1;
cin>>a>>b;
for(int i=1;i<=b;i++) ans*=a;
cout<<ans;
还有O(n²),O(nlogn),O(√n),O(logn),O(n³)等时间复杂度。
各种数据范围考虑的算法
n<=10:考虑使用O(n!)算法,暴力可过
n<=20:考虑使用O(2^n) 算法,例如二进制枚举
n<=100:考虑使用O(n^3)算法,例如暴力枚举求1~100内任意三个数的乘积
n<=1000:考虑使用O(n^2)算法,例如选择、冒泡、插入排序
n<=10000:考虑使用O(n√n)算法(某些性能好的判题机可以用O(n^2)),例如对n以内的数字进行质因数分解
n<=1000000:考虑使用O(nlogn)算法,比如归并排序
n<=10^7:考虑使用O(n)算法,比如线性筛
n<=10^12:考虑使用O(√n)算法,比如分解质因数
n<=2^(10^7):考虑使用O(logn)算法,比如二分查找(O(logn)这个数据范围太大了,实际上最多到2^18,不是二分不行,是无符号long long最多只能2^18,高精度时间复杂度就上去了)
n为任意:考虑O(1),比如直接输出这个数字
注意:常量是O(1),这个常量有时候大有时候小,10^3 O(n^3)常量够小也能1s过
请在评论区指出错误