时间复杂度和空间复杂度

时间复杂度

在算法的分析中,语句的执行次数T(n)是一个关于n(问题规模)的一个函数。分析n的变化引起T(n)的改变,进而得到T(n)的数量级,也就是时间频率。如果存在某一个辅助函数f(n),当n趋于无穷大时,T(n)/f(n)的值为一个不为0的常数,有T(n)=O(f(n)),这就是算法的渐进时间复杂度,也就是我们常说的时间复杂度

大O表示法:用O(f(n))来体现时间复杂度的方法被称作大O表示法;
大O推导法
O(1)叫做常数阶;O(n)叫做线性阶;O(n^2)叫做平方阶。
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大O阶。

举一个简单的例子

int i;
for(i=0;i<n;i++)//该语句的复杂度为O(n)
{
	cout<<i;    //该语句的复杂度为O(1);
}

这段代码的时间复杂度为O(n),其中“cout<<i”的执行次数为1,是常量阶,所以它的复杂度为O(1);“for(i=0;i<n;i++)”的执行次数是n,是线性阶,所以它的复杂度为O(n)。整段代码的复杂度为O(1*n),也就是O(n).
常见的时间复杂度所损耗时间排序
在这里插入图片描述

空间复杂度

空间复杂度指的是一个程序在执行时,所占有的临时内存空间大小:S(n)=O(f(n));n是问题的规模,f(n)为语句关于n所占据的内存的函数。
举个简单的例子
交换两个变量的值,它需要定义一个临时的变量,这就造成了空间复杂度,因为是常量阶,所以它的空间复杂度为O(1).

	int i = 10, j = 100;//两个需要交换的值
	 //交换变量的值
	int temp=i;//定义临时变量
	i=j;
	j=temp;

提到空间复杂度,就需要提一下递归了,在进行递归的算法的时候,每一次的递归都会使用临时的变量保存递归的信息,所以递归的方法很消耗内存,也就是空间复杂度相对较高。如果递归次数过多,会造成内存超载,无法计算得到需要的数据。所以,当循环的次数过多的时候,尽量不要使用递归方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值