数据结构学习Day2——时间复杂度与空间复杂度

数据结构学习Day2——时间复杂度与空间复杂度

时间复杂度

时间复杂度记为 T(n)=O(f(n))

  • 其中T(n)代表算法中所有语句的频度之和,它是该算法问题规模n的函数。时间复杂度主要分析T(n)的数量级。时间复杂度T(n)是问题规模n的函数。
  • 时间复杂度公式的通俗理解: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,公式全称:算法的渐进时间复杂度。
  • O的含义是T(n)的数量级。
  • 算法的时间复杂度不仅依赖于问题规模n,也取决于待输入数据的性质(如输入数据的初始状态)。
  • 在分析一个程序的时间复杂度时,有以下两条规则
    1. 加法规则
    T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
    2. 乘法规则
    T(n)=T1(n)*T2(n)=O(f(n)*O(g(n))=O(f(n)*g(n))

空间复杂度

空间复杂度记为 S(n)=O(g(n))

  • 算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。

一个时间复杂度的例子

	for (int i = 0; i < n; i++) {	 	//执行n次
		for (int j = 0; j < n; j++) {	//执行n^2次
			num++;						//执行n^2次
		}
	}

这段代码的时间复杂度为O(n^2).

我的计算方法:

  • 因为从0到n只需要操作n次,所以只需进行n次判断即可。设外层for循环为一个基本操作,需要的时间为T1(T1为执行一次for (int i = 0; i < n; i++)所需要的时间),由于外层for循环执行n次,所以运行时间就是n*T1。
  • 接下来,设内层循环为一个基本操作,需要的时间为T2(T2为执行一次for (int j = 0; j < n; j++)所需要的时间),由于内层for循环执行n^2 次,所以运行时间为n^2*T2.
  • 之后,设num++为一个基本操作,需要的时间为T3(T3为执行一次num++所需要的时间)),由于num++执行了n^2 次,所以运行时间为n^2*T3。
  • 最后,我们可以得出总的运行时间T=n* T1+n^ 2* T2+n^2* T3。在问题中n为用户输入,n会根据用户输入进行变化。当n越大,上式中的n^ 2越大,也就是说对式子影响最大的是n^ 2。所以,删掉其他部分得到T=O(n^2)。通过这种方法,可得知这段代码的运行时间与输入的n的平方成正比。
  • O这个符号的意思可以理解为“忽略重要项以外的内容”。O(n^ 2)的含义就是“算法的运行时长最长也就是n^ 2的常数倍”。通过这种方法可以直观地了解算法的时间复杂度。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值