认识时间复杂度

本文介绍了时间复杂度作为评估算法效率的关键指标,讲解了如何估算时间复杂度,并通过选择排序、冒泡排序和插入排序的例子详细阐述了时间复杂度的计算过程。重点强调了在数据规模增长时,高阶项在算法运行时间中的决定性作用。
摘要由CSDN通过智能技术生成

1. 评估算法优劣的核心指标是什么

  1. 时间复杂度(Time Complexity)
    • 时间复杂度是评估算法效率的主要指标,它表示算法执行时间随输入规模(如数组长度、图的大小等)增长的趋势。
    • 常见的时间复杂度有:O(1)(常数时间)、O(log n)(对数时间)、O(n)(线性时间)、O(n log n)(线性对数时间)、O(n^2)(平方时间)等。
    • 在选择算法时,我们倾向于选择时间复杂度较低的算法,因为这意味着算法的执行速度更快,尤其是在处理大规模数据时。
  1. 额外空间复杂度(Space Complexity)
    • 空间复杂度评估算法执行过程中除输入数据外所需额外存储空间的大小。
    • 空间复杂度同样随着输入规模的增长而增长,常见的空间复杂度有:O(1)(常数空间)、O(n)(线性空间)等。
    • 在选择算法时,如果输入数据规模很大,空间复杂度也是一个需要考虑的因素,因为过多的额外空间可能导致内存不足。
  1. 常数项时间(Constant Time Factors)
    • 常数项时间是指不随输入规模变化的时间消耗,例如算法中的固定次数循环、固定次数的比较等。
    • 在时间复杂度相同的情况下,常数项时间较小的算法在实际执行中可能具有更快的运行速度。
    • 实现细节(如编程语言、数据结构选择等)会影响常数项时间,因此在比较不同算法时,这些细节也需要考虑。

2. 什么是时间复杂度?时间复杂度怎么估算?

  1. 时间复杂度:算法执行过程中所需的基本操作数量(如比较、交换、移动等)与输入数据规模(如数组长度、图的大小等)之间的关系 (算法流程的总操作数量与样本数量之间的表达式关系)
  2. 时间复杂度估算:只看表达式最高阶项的部分

3. 什么是常数时间的操作?

如果一个操作的执行时间不以具体样本量为转移,每次执行时间都是固定时间。称这样的操作为常数时间的操作

常见的常数时间的操作:

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

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

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

数组寻址操作

4. 如何确定算法流程的总操作数量与样本数量之间的表达式关系?

  1. 想象该算法流程所处理的数据状况,要按照最差情况来。
  2. 把整个流程彻底拆分为一个个常数时间的操作。
  3. 如果数据量为N,看常数时间的操作的数量和数据量N是什么关系

5. 如何确定算法流程的时间复杂度?

当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉。

时间复杂度通常只关注算法中执行次数最多的操作,也就是最高阶项。这是因为当输入规模变得非常大时,高阶项的执行次数将远超过低阶项,从而主导了整个算法的运行时间。

记为:O(忽略掉系数的高阶项)

通过三个具体的例子,来实践一把时间复杂度的估算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值