第一节 时空复杂度的分析

1.时间复杂度

一、时间复杂度的概念

一个算法所需要的运算时间通常与所解决问题的规模大小有关。问题规模是一个和输入有关的量,通常把算法运行的时间T表示为n的函数,记为T(n)。不同的T(n)算法,当n增长时,运算时间增长的快慢很不相同。一个算法所需执行的时间就是该算法所有语句执行次数之和。当n逐渐增大时,T(n)的极限情况,一般简称为时间复杂度。

二、时间复杂度的计算样例

T(n)=3n^2+5n+2

首先 忽略常数项。
接着 忽略系数。
最后 只保留最高项。

得到时间复杂度为O(n^2)。

三、时间复杂度的大小比较

O(1)<O(log2 n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)

四、时间复杂度的具体理解

洛谷p2249

首先分析:

数据保证,1<=n<=10^6,0<=q<=10^9,1<=m<=10^6

如果采用暴力查找则数量级为10^5*10^6=10^11>10^9,因此必然会超过1秒运行时间,会出现TLE

因此采用二分查找,二分查找数量级为log2n,因为处理m个询问O(m)=10^6

log2 10^6=20,因此O(mlogn)=2*10^6<10*9就不会超时

#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int a[N];
int main(){
	int n,m;
	cin>>n>>m;
	
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	while(m--){
		int x;
		cin>>x;
		int low=1;
		int high=n;
		while(high>low){
			int mid=(high+low)/2;
			if(a[mid]>=x){
				high=mid;
			}
			else{
				low=mid+1;
			}
		}
			if(a[low]==x){	
				cout<<low<<" ";
			}
			else{
				cout<<-1<<" ";
			}
		}
	return 0;
}

2.空间复杂度

一、空间复杂度概念

一个算法的空间复 杂度是指程序运行开始到结束所需要的存储空间。包括算法本身所占用的存储空间、输入/输出数据占用的存储空间以及算法在运行过程中的工作单元和实现省法所需辅助空间类似于算法的时间复杂度,算法所需存储空间的量度记作:
S(n)= O(f(n))。

一般来说题目不会卡着。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值