2021年07月25 数据结构
前言
模拟登陆
数据结构
算法
衡量算法的两个指标:
- 时间复杂度
- 算法执行了多少时间
- 看代码执行的次数
- 只看循环次数
- 看代码执行的次数
- 算法执行了多少时间
- 空间复杂度
时间复杂度如何计算
1 | for(int i=0;i<n;i++){ |
时间复杂度O(n),称为线性空间。
lim{f(n)/G(n)}=常量
O(G(n))=
1 | for(int i=1;i<=n;i++) |
算法的复杂度是多少
设置循环变量最大值的情况,i=n,j=i=n,k=j=i=n
所以是n*n*n
,算法福再度为O(n^3)
1 | int i=1; |
假设执行f(n)次数
2^{f(n)}=n
f(n)=log_2{n}
lim_{n->+无穷}{f(n)/G(n)}=常量
所以G(n)可以设置为log_2{n}
所以算法复杂度为O(log_2{n})
空间复杂度
空间复杂度,不计入要处理的数据所占用的空间。
算法中额外使用的空间
循环变量可以不算
主要的存储方式
- 顺序存储
- 链式存储
- 哈希存储
- 索引存储
前三种存储主要存储在内存中。
索引存储—数据库
主要存储在在硬盘。
顺序存储
链式存储
插入和删除很方便
查找很麻烦。必须从头往后查找
分页显示
先从数据库中读取数据到后端,显示的时候前端在分批请求。
数据结构习题
链表
- 头插入
- 输入一组数,建立一个链表
- 未插入
- 倒置
- O(n)时间复杂度实现,(一个循环实现)
- 头插法实现
- 尾插罚实现
- O(n)时间复杂度实现,(一个循环实现)
- 有序插入
- 找插入点
- 插入点在头部
- 插入点在中间
- 插入点在尾部
- 找插入点
- 删除
- 重复的都要删除
- 两条有序的合并成一条有序的
- 两个单链表是否有公用节点,返回第一个公用的节点
- 方法1:从第一个链表找那个取出一个节点,到另一个链表中取查找(O(n^2))
- 方法2:算出两个链表的长度,从长的链表开始,去掉长度部分,等到相等的时候,循环2
- 求链表倒数第n个节点()
- 方法1:1个循环统计长度,然后再循环长度-n就是倒数第n个
- 方法2:使用两个指针,a指向头,b指向第3个,等b走到最后的时候,a就是倒数第3个。
- 判断链表是否有尾环
- 使用两个指针,a,b,a走1步,b走2步,如果b等于a,的时候就是有环了
- 追加提问:并找出环的入口点,在b等于a的时候,一个往前,一个往后,这样就变成了求公共节点了。
明天下午上课