算法的时间复杂度和空间复杂度
2018-03-16 16:12
337 查看
简介
算法复杂度分为时间复杂度和空间复杂度。时间复杂度
算法执行所需的时间长短
空间复杂度
算法执行所需的内存空间大小
时间复杂度
这里不说那些难懂的计算方式。只会列出部分级别的时间复杂度以及对应的例子。选择算法时可以对号入座。下面是各个级别对应的走势。
画的是真心不规范,只能把代表的大致走势画出来。
O(n^2)和
O(n^3)差不多的走势,只不过后者更陡坡而已。没画!
O(1)
for (int i = 0; i < 10; i++) { ... }
循环
10次这样的有限次数,我们已经知道的。
对于
CPU来说根本没有负担。非常快的!
大O表示法可以用常量
1来表示。
O(nlog2^n)
快速排序归并排序
堆排序
O(n)
for (int i = 0; i < n; i++) { ... }
n不确定,循环次数不确定。可能很大到几百万,可能很小只有几十次。
这种情况下时间复杂度为
O(n)
O(n^2)
for (int i = 0; i < score.length - 1; i++) { for (int j = 0; j < score.length - 1 - i; j++) { if (score[j] < score[j+1]) { int temp = score[j]; score[j] = score[j+1]; score[j+1] = temp; } } }
上述算法为冒泡排序
在元素个数不确定的情况下只能当循环次数为n
可以看见两个
for循环,所以为
n^2
如果是
n^3相信应该知道是有3个循环了
空间复杂度
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做
S(n)=O(f(n))。
所以它强调的是使用的辅助空间的的大小,而不是指所有的数据所占用的空间。
对于空间复杂度,平时考虑的不是太多。注重的是时间复杂度。因为时间复杂度和空间复杂度是相对的。
比如冒泡排序、直接排序、算则排序、希尔排序、堆排序等常见的排序的空间复杂度都是
O(1),少数为
O(n)。因为需要辅助空间并不多。
像是递归算法需要的临时空间就很多了,刚开始学递归算法时应该就听过递归算法很耗内存。因为递归算法不断调用自己,不断往内存中累加数据。
所以,大部分递归算法的空间复杂度为
O(n)。
此外,人工干预也会造成一些复杂度的偏移。比如你要计算一个值,可以
for循环对于每次的值比较。但也可以事先建立几千大小的临时数组。
再者,现在硬件升级的越来越好了!一点空间的牺牲换取时间的缩小是非常值得的!
相关文章推荐
- 算法的时间复杂度和空间复杂度
- 数据结构(算法的时间复杂度和空间复杂度)
- 算法的时间复杂度和空间复杂度
- 算法复杂度——时间复杂度和空间复杂度
- 算法——时间复杂度和空间复杂度
- 算法的空间复杂度于时间复杂度的关系
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 程序员算法时间空间复杂度速查表
- 《编程之美》中买书问题算法。空间复杂度O(n),时间复杂度O(n),求挑战
- 算法的时间复杂度和空间复杂度小结
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间和空间复杂度
- 算法的时间复杂度和空间复杂度-总结