时空复杂度的分析

时空复杂度的分析

时间复杂度

为什么会有时间复杂度?

在我们日常中,算法是我们用以解决问题的有效手段,而时间复杂度则是衡量一个算法的适用性、可靠性的标准之一。

时间复杂的概念。

语句的执行次数T(n)是输入规模n的一个函数,若存在某一个辅助函数f(n),
当你趋于无穷大时,有T(n)/f(n)的值是一个不为零的常数,则有T(n)=O(f(n)),这就是算法的时间渐进复杂度。

常见时间复杂度的大小比较

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) <O(n^3) < O(2^n) < O(n!) < O(n^n)

时间复杂度的计算样例。

洛谷P2249
在本题中的数据范围为:1<=n<=10^6 ,0<=q<=10^9 ,1<=m<=10^6, 若是我们直接利用暴力求解,那么时间复杂度为O(nm)=10^11。
然而正常情况下,机器一秒只能运行的数据为10^9,所以最后你将会得到 TLE。所以这时我们需要利用算法吧时间复杂度降下来,我在这里推荐使用二分法。分析:二分查找数量级为log2n,因为处理m个询问O(m)=10^6,log2 10^6=20 , 因此O(mlogn) = 20*10^6 < 10^9就不会超时。

#include <stdio.h>

int main() {
	long int n, m;
	scanf("%ld %ld", &n, &m);
	long int a[n];

	for (int i = 1; i <= n; i++) {
		scanf("%ld", &a[i]);
	}

	while (m --) {
		long int l = 1, r = n,mid, x;
		scanf("%ld", &x);

		while (l < r) {
			mid = (l + r) / 2;

			if (a[mid] >= x)
				r = mid;
			else
				l = mid + 1;
		}

		if (a[l] == x)
			printf("%ld ", l);
		else
			printf("-1 ");

	}

	return 0;
}

空间复杂度

空间复杂度 (SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。. 一个算法在计算机 存储器 上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。

注:初学者了解即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值