C++语言之时间复杂度与空间复杂度

看算法的好坏主要是从时间复杂度,空间复杂度两个角度去衡量算法的优劣。本文会介绍时间复杂度与空间复杂度。


目录

1.时间复杂度

1.1 常见的时间复杂度

1.2 常见操作的时间复杂度

1.3 如何求时间复杂度

1.3.1 找出算法中的基本语句

1.3.2 计算基本语句的执行次数的数量级

1.3.3 用大Ο记号表示算法的时间性能。

2.空间复杂度


1.时间复杂度

1.1 常见的时间复杂度

O(1)常数阶复杂度
O(log n)对数阶复杂度
O(n)线性阶复杂度
O(nlog n)对数线性阶复杂度
O(n^{2}平方阶复杂度
O(n^{3}立方阶复杂度
O(2^{n}指针阶复杂度
O(n!)阶乘复杂度

1.2 常见操作的时间复杂度

(1)数组的索引访问:O(1)

(2)求长度:O(1)

(3)在尾部添加元素:O(1)

(4)查找元素:

(5)线性查找:O(n)

(6)二分查找(需要先排序):O(log n)

(7)插入元素:

在开头插入:O(n)

在结尾插入:O(1)

在中间插入:O(n)

(8)删除元素:

在开头删除:O(n)

在结尾删除:O(1)

在中间删除:O(n)

(9)排序:

冒泡排序:O(n^2)

选择排序:O(n^2)

插入排序:O(n^2)

快速排序:O(n log n)

归并排序:O(n log n)

希尔排序:O(n log n)

堆排序:O(n log n)

(10)查找最大/最小值:

线性查找:O(n)

堆排序:O(n log n)

快速排序:O(n log n)

(11)查找中位数:

排序后取中间值:O(n log n)

中位数算法(类似快排):O(n)

需要注意的是,以上时间复杂度均为最坏情况下的复杂度,实际情况可能会有所不同。

1.3 如何求时间复杂度

1.3.1 找出算法中的基本语句

算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。

1.3.2 计算基本语句的执行次数的数量级

只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在增长率。

1.3.3 用大Ο记号表示算法的时间性能。

将基本语句执行次数的数量级放入大Ο记号中。

2.空间复杂度

空间复杂度定义为算法临时占用的内存空间。
当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)。
当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(10g2n);
当一个算法的空间复杂度与n成线性比例关系时,可表示为O(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址指针的空间,即一个机器字长空间。


创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!

冰焰狼 | 文

如果本篇博客有任何错误,请批评指教,不胜感激 !

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值