返回

算法篇学习笔记 (一)!50%的人竟搞错原理,另50%的人在无脑背诵!

IOS



算法之妙,在于洞悉世界变化的底层规律;算法之用,在于解决实际问题的有力工具。

作为程序员,算法是必不可少的核心技能。掌握算法,不仅能让你写出更优美的代码,还能让你在面试中脱颖而出。

在这篇笔记中,我们将深入浅出地探讨算法评价的核心要素——时间复杂度和空间复杂度。了解这些知识点,你就能准确理解算法的优劣,轻松应对各种排序算法面试题。

一、算法评价的两个维度

算法的优劣主要从【时间】和【空间】两个维度来考量。

1. 时间复杂度

时间复杂度是指算法执行所花费的时间。

算法的时间复杂度通常用大O符号来表示。大O符号表示的是算法最坏情况下的时间复杂度。

常见的时间复杂度有:

O(1):常数时间复杂度。无论输入数据量有多大,算法执行的时间都是常数。

O(log n):对数时间复杂度。随着输入数据量的增加,算法执行的时间以对数形式增长。

O(n):线性时间复杂度。随着输入数据量的增加,算法执行的时间以线性形式增长。

O(n log n):对数线性时间复杂度。随着输入数据量的增加,算法执行的时间以对数线性形式增长。

O(n^2):平方时间复杂度。随着输入数据量的增加,算法执行的时间以平方形式增长。

O(2^n):指数时间复杂度。随着输入数据量的增加,算法执行的时间以指数形式增长。

2. 空间复杂度

空间复杂度是指算法执行所需要的空间。

算法的空间复杂度通常也用大O符号来表示。大O符号表示的是算法最坏情况下的空间复杂度。

常见的空间复杂度有:

O(1):常数空间复杂度。无论输入数据量有多大,算法执行所需要的空间都是常数。

O(log n):对数空间复杂度。随着输入数据量的增加,算法执行所需要的空间以对数形式增长。

O(n):线性空间复杂度。随着输入数据量的增加,算法执行所需要的空间以线性形式增长。

O(n^2):平方空间复杂度。随着输入数据量的增加,算法执行所需要的空间以平方形式增长。

O(2^n):指数空间复杂度。随着输入数据量的增加,算法执行所需要的空间以指数形式增长。

二、稳定排序和原地算法

1. 稳定排序

如果相等的2个元素,在排序前后的相对位置保持不变,那么就叫稳定的排序算法。

常见的稳定排序算法有:

冒泡排序

选择排序

插入排序

归并排序

2. 原地算法

不依赖额外资源,或依靠少量的额外资源,仅靠输入来覆盖输出的为原地算法。

空间复杂度O(1)的都可以认为是原地算法。

常见的原地排序算法有:

冒泡排序

选择排序

插入排序

三、总结

掌握算法评价的核心要素——时间复杂度和空间复杂度,不仅能让你准确理解算法的优劣,还能轻松应对各种排序算法面试题。

希望这篇笔记能对你有所帮助。如果你有任何问题,欢迎在评论区留言。