算法篇学习笔记 (一)!50%的人竟搞错原理,另50%的人在无脑背诵!
2024-01-02 19:28:31
算法之妙,在于洞悉世界变化的底层规律;算法之用,在于解决实际问题的有力工具。
作为程序员,算法是必不可少的核心技能。掌握算法,不仅能让你写出更优美的代码,还能让你在面试中脱颖而出。
在这篇笔记中,我们将深入浅出地探讨算法评价的核心要素——时间复杂度和空间复杂度。了解这些知识点,你就能准确理解算法的优劣,轻松应对各种排序算法面试题。
一、算法评价的两个维度
算法的优劣主要从【时间】和【空间】两个维度来考量。
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)的都可以认为是原地算法。
常见的原地排序算法有:
冒泡排序
选择排序
插入排序
三、总结
掌握算法评价的核心要素——时间复杂度和空间复杂度,不仅能让你准确理解算法的优劣,还能轻松应对各种排序算法面试题。
希望这篇笔记能对你有所帮助。如果你有任何问题,欢迎在评论区留言。