空间复杂度与时间复杂度非常相似。
空间复杂度是评估算法占用内存空间变化趋势的一种表达方式。它表达的是一种增长曲线趋势,而不具体的内存空间大小。
空间负责度用大 O 表示法来表示,他具体的公式是
是数学公式中对于函数的一种表达,我们也可以用代码来平替一下简化理解
1// 针对线性时间复杂度2function f1(n) {3return n4}56// 针对平方时间复杂度7function f2(n) {8return n * n9}
函数 f1 等价于
函数 f2 等价于
线性空间复杂度常见于数组,链表,栈,队列等线性数据结构。
线性空间复杂度表示为 ,对应的数学公式就是
在坐标系中我们可以用一条直线来表示,这条直线表示的是输入和输出的关系。x 轴表示输入,y 轴表示输出。
平方空间复杂度常见于二维数组,矩阵,图等二维数据结构。
平方空间复杂度表示为 ,对应的数学公式就是
在坐标系中我们可以用一个抛物线来表示,这条抛物线表示的是输入和输出之间的关系。x 轴表示输入,y 轴表示输出。
指数空间复杂度常见于递归,斐波那契数列等。
指数空间复杂度表示为 ,对应的数学公式就是
用坐标系表示为
由于三方工具的bug,导致曲线无法正常显示,不过移入鼠标之后可以显示坐标点,通过移动鼠标可以查看坐标点的变化趋势
对数空间复杂度常见于分治算法,例如二分查找,快速排序等。
对数空间复杂度表示为 ,或者简化为 ,对应的数学公式就是
用坐标系表示为
通常情况下,在真实的实践过程中,在选择算法时,我们可能会更专注于时间效率,或者更多的去利用空间来换取时间。因此只要空间的消耗不是特别大,我们通常会优先选择时间复杂度更低的算法。