评估算法的优劣指标-时间复杂度-空间复杂度-常数操作

一 、时间复杂度

1 看常数操作

        常数操作算O(1)

        常见的算术运算(+、-、*、/、% 等)

        常见的位运算(>>、>>>、<<、|、&、^等)

        赋值、比较、自增、自减操作等

        数组寻址操作

        常数时间操作

                数组-按地址偏移量直接命中 这个就是O(1)

        非固定时间操作

                链表-需要挨个寻址,这个就不是常数时间操作就是O(N)

2 算法最差情况的复杂度是这个算法的复杂度

        两层循环,第二层循环是第一层的 i-1 次 这个是等差数列,最后转换成式子  a * n^2 +b * n 这里时间复杂度只看最高阶项部分n^2 所以时间复杂度是O(N^2)

3 例子

排序算法 算时间复杂度

冒泡  O(N^2) 任何情况不变

        循环数组每个数

        循环N-1 做交换冒泡

插入排序 O(N^2) 在有序情况下是O(n) 但是时间复杂度O只看最不好的情况

        循环数组每个

        N-1 这个数向前比较如果小于就交换

选择 排序 O(N^2) 比冒泡号,因为空间换时间,交换最多只有N次

        循环数组每个

        循环n-1个 找到最大的记录下标志,最后与i做交换然后i++

二 、 额外空间复杂度(流程决定)

例1 一个数组 算总和 需要一个变量 来记录sum值

什么是额外空间?

数组开辟的空间,是原始数据,不算额外空间。

需要计算结果而开辟的空间,而不是原始数据,这样开辟的空间是额外空间。

例2   一个数组 算每个数出现次数 需要一个map来记录

什么是额外空间复杂度

例1的额外空间复杂度是O(1) 因为他不会随着初始数据变化而增长

例2 的额外空间复杂度是O(N)因为他会随着初始数据变化而增长

总结:算法入输出的空间都不是额外空间!

三、 常数项的时间

比较常数操作 多少

例如 插入排序 1234567 是O(n)

例如 冒泡 1234567 是O(n^2)

这里插入比冒泡少了比较和交换的常数项操作

比较常数操作 优劣

 排序算法 交换操作  一个是用 + - 进行 一个是用 ^ 进行

常数操作^ 比 + - 快 因为是位运算

如何PK常数项时间?

直接测试

四 、PK算法哪个最优

1 先满足时间复杂度最优

2 再满足空间复杂度最优

3 常数项因素 不算做PK最优(跟算法思想没关系,是细节方面)

五、排名从好到差:

O(1)  

O(logN)  

O(N)  

O(N*logN)  

O(N^2)   O(N^3)   …   O(N^K)

O(2^N)   O(3^N)   …   O(K^N)

O(N!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在计算机科学中,算法时间复杂度和空间复杂度是衡量算法效率的两个重要指标时间复杂度指的是算法执行所需的时间量,通常用大 O 记法表示。例如,如果一个算法时间复杂度为 O(n),那么它的执行时间随着输入数据规模 n 的增加而线性增长。常见的时间复杂度包括常数时间 O(1)、线性时间 O(n)、对数时间 O(log n)、平方时间 O(n^2)、立方时间 O(n^3)等等。通常,我们希望算法时间复杂度越小越好,因为这意味着它可以更快地处理大规模数据。 空间复杂度指的是算法在执行过程中所需的内存空间,也通常用大 O 记法表示。例如,如果一个算法空间复杂度为 O(n),那么它所使用的内存空间随着输入数据规模 n 的增加而线性增长。常见的空间复杂度包括常数空间 O(1)、线性空间 O(n)、对数空间 O(log n)、平方空间 O(n^2)、立方空间 O(n^3)等等。通常,我们也希望算法空间复杂度越小越好,因为这意味着它可以在更小的内存空间中运行。 需要注意的是,算法时间复杂度和空间复杂度通常是相互矛盾的。例如,为了降低时间复杂度,可能需要增加空间复杂度,反之亦然。因此,在实际编写算法时,需要根据具体情况综合考虑时间复杂度和空间复杂度。 ### 回答2: 时间复杂度和空间复杂度是评估算法效率的两个重要指标时间复杂度是指算法执行所需要的时间和问题规模之间的关系。在分析时间复杂度时,通常计算算法中的基本操作执行次数。时间复杂度用大O表示法表示,例如O(1)表示常数时间复杂度,O(n)表示线性时间复杂度,O(n^2)表示平方时间复杂度等。时间复杂度越低,算法执行所需时间越短。 空间复杂度是指算法执行所需要的额外空间和问题规模之间的关系。在分析空间复杂度时,通常计算算法所需的额外空间大小,包括变量、数组、堆栈、队列等。空间复杂度同样使用大O表示法表示,例如O(1)表示常数空间复杂度,O(n)表示线性空间复杂度,O(n^2)表示平方空间复杂度等。空间复杂度越低,算法所需的额外空间越少。 时间复杂度和空间复杂度是相互影响的。通常情况下,时间复杂度较低的算法往往需要更多的额外空间,而空间复杂度较低的算法往往需要更多的时间。因此,在算法设计时,需要综合考虑时间复杂度和空间复杂度,选择更合适的算法。 总而言之,时间复杂度和空间复杂度是对算法效率的度量,用于评估算法执行所需的时间和额外空间。通过分析算法时间复杂度和空间复杂度,可以选择更优的算法,提高程序的执行效率。 ### 回答3: 在计算机科学中,算法时间复杂度和空间复杂度是衡量算法优劣的重要指标时间复杂度是用来衡量算法执行所需时间的度量。它表示随着输入规模的增长,算法所需要执行的基本操作的数量。常见的时间复杂度有常数时间O(1)、线性时间O(n)、对数时间O(log n)、平方时间O(n^2)等。时间复杂度越小,算法的执行速度越快。 空间复杂度是用来衡量算法执行所需空间的度量。它表示随着输入规模的增长,算法所需要的额外空间的数量。常见的空间复杂度有常数空间O(1)、线性空间O(n)、对数空间O(log n)、平方空间O(n^2)等。空间复杂度越小,算法所需的内存空间越少。 在分析时间空间复杂度时,一般采用最坏情况下的复杂度作为评估标准,因为最坏情况下的复杂度能够保证算法的性能。同时,复杂度只是一种理论上的度量,实际运行结果可能受到硬件环境、编译器优化等因素的影响。 衡量和比较算法时间复杂度和空间复杂度对于优化算法和选择合适的算法非常重要。在实际开发中,我们需要根据具体的应用场景和需求,选择适合的算法来平衡时间空间的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值