萌新帮助计划02——时间复杂度和空间复杂度

前言

不知不觉中,我们的信友队又涌入了一批新成员,新面孔,为了帮助这些萌新更轻松的应对接下来的学习进程,我决定写一个 比较简单的 水贴,如果你是大佬,可以选择直接跳过。

时间复杂度

时间复杂度是指算法执行所需的时间与输入规模之间的关系。通常用大O表示法(Big O Notation)来描述时间复杂度。大O表示法给出了算法执行时间的上界,即最坏情况下的时间复杂度。 是我们评估我们算法使用的时间的方式

  1. 计算方法 统计算法中各个步骤的执行次数:
    分析算法中每条指令或操作的执行次数,将其表示为输入规模n的函数

  2. 简化执行次数表达式:当输入规模n趋向于无穷大时,去除表达式中对结果影响较小的项,只保留最高阶的项。例如,对于表达式3n²+4n+5,当n趋向于无穷大时,可以简化为n²。

  3. 大O记法表示时间复杂度:将简化后的表达式用大O记法表示,如O(n²)。

当然,我们说一些常见的时间复杂度

常见时间复杂度及算法举例

  1. 常数阶O(1):算法的执行时间与输入规模无关,无论输入规模多大,执行时间都是固定的。例如,访问数组中的单个元素
  2. 对数阶O(log n):算法的执行时间与输入规模的对数成正比。常见于二分搜索等算法
  3. 线性阶O(n):算法的执行时间与输入规模成正比。例如,遍历一个数组,还有常见的输入输出数组
  4. 线性对数阶O(n log n):算法的执行时间与输入规模的乘积和对数成正比。常见于快速排序等算法。
  5. 平方阶O(n²):算法的执行时间与输入规模的平方成正比。例如,嵌套的双层循环
  6. 立方阶O(n³):算法的执行时间与输入规模的立方成正比。例如,三层嵌套循环
  7. 指数阶O(2ⁿ):算法的执行时间与2的输入规模次方成正比。例如,递归计算斐波那契数列的朴素算法

意义

时间复杂度是衡量算法效率的重要指标,它可以帮助我们在不同的算法中进行选择,特别是在处理大规模数据时。通过分析时间复杂度,我们可以预测算法在不同输入规模下的性能,从而选择最适合特定问题的算法

空间复杂度

概念

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做 S(n)=O(f(n))。以下是关于空间复杂度的详细介绍:

计算内容

  1. 常数级空间复杂度 O(1):如果算法执行过程中额外申请的内存空间不受输入值影响,是一个固定值,那么该算法的空间复杂度为O(1)。例如,一个简单的计算两个数之和的算法,无论输入的数有多大,它在运行过程中只需要使用固定的几个变量来存储中间结果和最终结果,不需要额外申请大量的存储空间。

  2. 线性空间复杂度 O(n):当算法申请的存储空间与输入值 n成线性增长关系时,空间复杂度为 O(n)。比如,创建一个长度为 n的数组来存储数据,那么随着n的增大,所需的存储空间也会线性增加。

  3. 平方级空间复杂度 O(n^{2}) :若算法申请的存储空间与输入值 n的平方成正比,空间复杂度就是 O(n^{2}) 。例如,创建一个二维矩阵来存储数据,矩阵的行数和列数都与n有关,那么所需的存储空间就与成正比。

  4. 对数级空间复杂度 O(log_n) :在某些算法中,如二分查找算法,随着输入数据量n的增加,算法需要的存储空间增长缓慢,与以2为底的n的对数成正比,此时空间复杂度为 O(log_n)

  5. 指数级空间复杂度 O(2^{n}) :对于一些递归算法,如计算斐波那契数列的递归算法,其空间复杂度可能会随着输入值n的增加呈指数级增长,即 O(2^{n}) 。这种情况下,算法的空间需求增长非常迅速,对于较大的n,可能会导致内存不足的问题。

与时间复杂度的关系

相互影响:时间复杂度和空间复杂度往往是相互影响的。在设计算法时,通常需要在时间复杂度和空间复杂度之间进行权衡。例如,某些算法可能通过牺牲一定的空间复杂度来换取更好的时间复杂度,即使用更多的存储空间来减少算法的运行时间;而另一些算法可能会为了节省存储空间而采用更复杂的计算方式,从而导致时间复杂度的增加。

综合考虑:在实际应用中,需要根据具体的问题场景和需求来综合考虑算法的时间复杂度和空间复杂度。如果问题对时间要求非常严格,例如在实时系统中,可能需要优先选择时间复杂度较低的算法,即使它的空间复杂度相对较高;而在内存资源有限的环境中,如嵌入式系统或移动设备中,空间复杂度则可能成为更关键的因素,需要选择空间复杂度较低的算法,即使它的时间复杂度可能不是最优的

后记

以上参考信息均来源于天工AI,不喜勿喷!!!

点个赞再走吧!

废话

千万别打开!!!

总结
总结
总结
总结
总结
总结
总结
总结
总结
总结
总结
总结

你还是打开了,但是你什么都没看到。

3 个赞

……

懒得手打

丸辣

不过没事,时间复杂度那部分是我自己写的

我不知道有没有50%,像我这种闲得慌的就会一个字一个字给你数 :grinning:

斯……

我自己数的话是838+117+84我自己写的

980是AI写的

这样是不是就没超了

好像确实(你再不说我可能就把你举报了 :yawning_face:

@linan04103 告诉你个小秘密,AI的那个帖子,其实是我和栗子酱一起谋划的