复杂度与空间复杂度"/>
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() | 平方阶复杂度 |
O() | 立方阶复杂度 |
O() | 指针阶复杂度 |
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).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址指针的空间,即一个机器字长空间。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!
冰焰狼 | 文
如果本篇博客有任何错误,请批评指教,不胜感激 !
更多推荐
C++语言之时间复杂度与空间复杂度
发布评论