一,数据结构
1. 什么是数据结构?
数据结构是在内存中管理数据——增删查改。
数据库是在磁盘中管理数据——增删查改。
2. 什么是算法?
算法是定义良好的计算过程,它取一个或一组的值作为输入,并产生一个或一组值作为输出。简答来说,算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
3. 数据结构的重要性
- 数据结构与算法相辅相成。
- 大厂在招聘时,在笔试和面试对数据结构和算法的能力要求很高。
4. 如何学好数据结构和算法
- 手撕代码,多做题。
- 多思考,多画图。
5.数据结构和算法推荐书籍
- C语言版本——严蔚敏
- C++—— 殷人坤
- 大话数据结构——图画的很好
- 剑指Offer
- 程序源代码面试指南
- 刷完上面的内容可以去刷 LeetCode.+牛客网
二,算法的时间复杂度和空间复杂度
1. 算法效率
- 如何衡量算法的好坏?两个维度:
- 时间复杂度
- 空间复杂度
经过计算机行业的快速发展,计算机的存储容量已经达到了很高的高度,如今已不再那么关注空间复杂度。
2. 时间复杂度
算法的时间复杂度是一个函数,是数学中带未知数的表达式,算法的基本操作执行的次数,就是算法的时间复杂度。
- 表示方法:大O的渐进表示法
大O符号:是用于描述函数渐进行为的数学符号
- 用常数1取代运行时间中的所有加法
- 在写改后的运行次数中,只保留最高级阶项
- 若最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
3. 常见时间复杂度计算举例
时间复杂度: O(N).
时间复杂度 : O(N^2)
二分查找
4. 空间复杂度
空间复杂度也是一个数学表达式,主要衡量一个算法运行时临时额外所占空间的大小,空间复杂度不是程序占了都少bytes的空间,算的是变量的个数,计算规则与时间复杂度类似,也使用大O的渐进表示法。
函数运行书所需要的栈空间(存储参数,局部变量,一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要是通过在运行时显式申请的额外空间来确定。
5.0 常见空间复杂度计算举例
(注意空间可以重复利用,时间不可以重复利用)。
调用f1和f2使用的是同一块空间
O(N).