1. 算法的时间复杂度和空间复杂度的关系
算法的时间复杂度和空间复杂度是描述算法性能的两个重要指标。它们之间没有直接的数学关系,而是相互独立的。
时间复杂度(TimeComplexity)是衡量算法执行时间随输入规模增长而变化的度量。它通常用大O符号表示,比如O(n)、O(nlogn)等。时间复杂度描述的是算法所需执行的基本操作数目,即算法的运行时间与问题规模之间的关系。以下是常见的时间复杂度:
4、线性对数空间复杂度O(nlogn):算法所需的额外存储空间介于线性空间复杂度和平方空间复杂度之间。
生活当中的空间复杂度应用
1、存储空间管理:在计算机、智能手机和其电子设备中,需要合理管理存储空间。选择适当的文件压缩算法或删除不再需要的文件,以最大程度地减少所需的存储空间。
2、数据备份:对于重要的数据和文件,通常会进行备份以防止丢失。备份涉及到存储额外的副本或增量备份,因此需要考虑备份过程所需的存储空间。
3、图像和视频处理:当处理大量图像或视频时,需要考虑存储原始数据以及处理过程中产生的中间结果所需的存储空间。例如,在图像编辑软件中,可能需要使用额外内存来存储图层和编辑历史记录。
2. 各种算法的时间复杂度
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
一般时间复杂度到了2 n(指数阶)及更大的时间复杂度,这样的算法我们基本上不会用了,太不实用了.比如递归实现的汉诺塔问题算法就是O(2 n).
平方阶(n^2)的算法是勉强能用,而nlogn及更小的时间复杂度算法那就是非常高效的算法了啊.
空间复杂度
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)
快速排序空间复杂度为logn(因为递归调用了) ,归并排序空间复杂是O(n),需要一个大小为n的临时数组.
基数排序的空间复杂是O(n),桶排序的空间复杂度不确定
原文: https://blog.csdn.net/weiwenhp/article/details/8622728