更新数据结构第七章

This commit is contained in:
Alice-and-Bob
2020-08-14 21:52:22 +08:00
parent 038ac66f21
commit 368ede1cf1
9 changed files with 147 additions and 18 deletions

View File

@@ -5,12 +5,17 @@
+ **采用XMind:ZEN 2020制作,请使用等于或高于此版本的XMind打开。**
+ 能填多少坑取决于作者决定考哪个学校;如果决定的学校不是考408,那我只会更新那个学校的科目的总结(┓( ´∀` )┏)咕咕咕
+ 如果对你有帮助有启发,欢迎**点个star**资瓷一下作者;同时欢迎有**对内容更好想法/懂得xmind排版**的朋友提交issue帮助这个项目更好
+ ~~能填多少坑取决于作者决定考哪个学校;如果决定的学校不是考408,那我只会更新那个学校的科目的总结(┓( ´∀` )┏)咕咕咕~~
+ 最终决定考863
+ TODO:在21研考结束后,把所有的经验资料整理放到这个项目下
## NOTE:
+ 不适合在XMind里表达的内容,全部写在了同文件夹里的`*.md`文件或是`*.cpp`文件;一个文件夹里应该关注的仅有`*.xmind, *.md, *.cpp`文件,其余可以不用管
+ 不适合在XMind里表达的内容,全部写在了同文件夹里的`*.md`文件或是`*.cpp`文件;一个文件夹里应该关注的仅有`*.xmind, *.md, *.cpp`文件,其余可以不用管
+ 在Markdown文件中使用了latex代码,请确保你的Markdown编辑器支持latex扩展以提高阅读体验
> 或许你也可以参考[这个项目](https://github.com/SSHeRun/CS-Xmind-Note)
@@ -19,24 +24,31 @@
---
## 计算机网络
+ [x] [第一章 概论](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E6%A6%82%E8%BF%B0.xmind)
+ [x] [第二章 物理层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82.xmind)
+ [x] [第三章 数据链路层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82.xmind)
+ [x] [第四章 网络层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82.xmind)
+ [x] [第五章 运输层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82.xmind)
+ [x] [第六章 应用层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82.xmind)
+ [x] [第一章 概论](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC1%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E6%A6%82%E8%BF%B0.xmind)
+ [x] [第二章 物理层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC2%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82.xmind)
+ [x] [第三章 数据链路层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC3%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82.xmind)
+ [x] [第四章 网络层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC4%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82.xmind)
+ [x] [第五章 运输层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC5%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82.xmind)
+ [x] [第六章 应用层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC6%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82.xmind)
## 数据结构
+ [x] [第一章 绪论](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%BB%AA%E8%AE%BA.xmind)
+ [x] [第二章 线性表](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8.xmind)
+ [x] [第三章 栈和队列](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97.xmind)
+ [x] [第四章 串](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E4%B8%B2/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E4%B8%B2.xmind)
+ [x] [第五章 树与二叉树](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91.xmind)
+ [x] 第六章 图
+ [ ] 第七章 查找
+ [x] [第一章 绪论](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC1%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%BB%AA%E8%AE%BA.xmind)
+ [x] [第二章 线性表](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC2%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8.xmind)
+ [x] [第三章 栈和队列](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC3%E7%AB%A0%20%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97.xmind)
+ [x] [第四章 串](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC4%E7%AB%A0%20%E4%B8%B2/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E4%B8%B2.xmind)
+ [x] [第五章 树与二叉树](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC5%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91.xmind)
+ [x] [第六章 图](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC6%E7%AB%A0%20%E5%9B%BE/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%9B%BE.xmind)
+ [x] 第七章 查找
+ [ ] 第八章 排序
## 计算机组成原理
+ [ ] 第一章 计算机系统概述
+ [ ] 第二章 数据的表示和运算
+ [ ] 第三章 存储系统
+ [ ] 第四章 指令系统
+ [ ] 第五章 中央处理器
+ [ ] 第六章 总线
+ [ ] 第七章 输入输出系统
## 操作系统
## 计算机组成原理
## 网络安全基础与应用

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 KiB

View File

@@ -80,4 +80,22 @@
![](a.png)
# 关键路径
- AOE网:在AOV网的基础上,添加了边权值,代表了完成活动的开销(需要的时间等)
- AOE网:在AOV网的基础上,添加了边权值,代表了完成活动的开销(需要的时间等)
- 关键路径:从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径,关键路径上的活动称为关键活动
1. 事件$v_k$发生的最早发生时间ve(k):
指从源点到任意顶点k的最长路径长度,决定了从k开始的活动能够开工的最早时间
2. 时间$v_k$的最迟发生时间vl(k):
指不推迟整个工程完成的前提下,即保证其后继事件j在它的最迟发生时间vl(j)之前能够发生时,该事件最迟必须发生的时间。
3. 活动$a_i$最早开始时间e(i)
弧起点所指代的事件的最早发生时间
4. 活动$a_i$最迟开始时间l(i)
弧终点所指代的事件的最迟发生时间与该活动所需时间之差
5. 活动的最迟开始时间和最早开始时间的差额
- 求关键路径算法
![](aa.png)
- 实例
![](aaa.png)
在选择题中可以省略步骤,但是解答题必须写完全部步骤

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -0,0 +1,99 @@
# 顺序查找和折半查找
## 顺序查找
1. 一般线性表顺序查找
$$ASL_{成功}=\sum_{i=1}^{n}P_i(n-i+1)=\frac{n+1}{2}$$
$$ASL_{失败}=n+1$$
2. 有序表顺序查找
$$ASL_{成功}=\sum_{i=1}^{n}P_i(n-i+1)=\frac{n+1}{2}$$
$$ASL_{失败}=\frac{1+2+\cdots+n+n}{n+1}=\frac{n}{2}+\frac{n}{n+1}$$
> 有序表在查找失败时的性能优于一般线性表顺序查找
## 折半查找
```cpp
int Binary_Search(SeqList L, ElemType key){
int low=0, high=L.TableLen-1, mid;
while(low<=high){
mid=(low+high)/2;
if(L.elem[mid]==key){
return mid;
}
else if(L.elem[mid]>key){
high=mid-1;
}
else{
low=mid+1;
}
}
return -1;
}
```
$$ASL_{成功}=\frac{n+1}{n}log_2(n+1)-1\approx log_2(n+1)-1$$
> 仅适用于有随机存储性质的、关键字按序排列的线性表
## 分块查找
将查找表分为若干子块,块内元素可以无序,但块间有序———第一个块的最大关键字小于第二个块的最小关键字……;再建立一个索引表,其中含有各块的最大关键字和各块的第一个元素地址,索引表按关键字有序排列
$$ASL=\frac{s^2+2s+n}{2s} \text{ 其中,查找表长度为n,均分为b块,每块有s个记录}$$
# B树和B+树
## B树
1. 概念
- B树是一棵m叉树
- 为了保证查找效率,尽量减少树高,规定除根结点之外的非叶结点最少有$\left \lceil m/2 \right \rceil$个子树,即每个结点最少含有$\left \lceil m/2 \right \rceil-1$个关键字
- ![](1.png)p0所指向的子树中,所有关键字都小于k1;p1所指向的子树中,所有关键字都大于k1
2. 高度
- 对包含n个关键字,高度为h,阶数为m的B树:
- 高度范围
![](3.png)
3. 插入
对B树进行插入操作
1. 定位:利用查找算法,假设查找要插入的key,则会查找到一个失败结点;继而可以定位到上面的终端结点中要插入的位置。
2. 插入:有两种情况
- 插入后的终端结点的结点个数符合要求,直接插入
- 插入后的结点个数多于m-1,则要分裂该节点;以$\left \lceil m/2 \right \rceil$为中,并把该元素提高到父节点位置,左右半边成为新的子树
4. 删除
删除节点涉及到合并结点
- 删除一个非终端结点中的元素:用该元素的前驱/后继覆盖该元素,接着在终端结点删除前驱/后继元素
- 删除一个终端结点中的元素:
- 若删除后结点元素个数仍大于$\left \lceil m/2 \right \rceil$,则直接删除
- 若删除后结点元素个数不符合最小要求,则向其左右兄弟借
- 若够借:用前驱、前驱的前驱来代替,或是后继、后继的后继来代替
- 不够借:合并左右兄弟和父节点,重新排列组合
## B+树
1. 概念:
- 根结点至少有两个子树,其他节点最少有$\left \lceil m/2 \right \rceil$个子树
- 节点的子树个数等于关键字的个数
- 只有叶结点有关键字及对应记录的地址,非叶结点只有其子树中的最大关键字和对应的子树地址
2. 与B树的差异
- B树m个关键字对应了m+1个子树;B+树m个关键字对应了m个子树
- B+树节点关键字个数范围 $\left \lceil m/2 \right \rceil \leq n \leq m$ ;B树范围$\left \lceil m/2 \right \rceil -1 \leq m-1$
- B树节点包含了关键字和关键字指向的记录的地址;B+树只在叶结点包含了记录的地址,非叶结点只有索引的作用
# 散列查找
## 散列函数
1. 直接定址法
- H(key)=key / H(key)=a*key+b
2. 除留余数法
- H(key)=key%p
- p是一个不大于且最接近散列表长的质数
3. 数字分析法
4. 平方取中法
## 处理地址冲突
### 开放定址法
$$ H_i=(H(key)+d_i)%m $$
$H_i$表示第i次冲突后的新地址,$d_i$表示增量序列
- 确定增量序列
1. 线性探测法
- $d_i=0,1\cdots$
2. 平方探测法
- $d_i=0^2, 1^2, -1^2, \cdots$
3. 再散列法
- $H_i=(H(key)+i\times Hash_2{key})\%m$
4. 伪随机序列法
- 采用伪随机序列作为增量序列
> 开放定址情况下,不能随意删除元素,因为这会截断其他具有相同散列地址的元素的查找地址。只能逻辑删除
### 拉链法
把同义词存在同一个链表中,由其散列地址唯一标识
## 装填因子
$\alpha=\frac{表中记录数n}{散列表长度m}$,装填因子表示了散列表“满”的程度;ASL与装填因子有关,这是因为散列表越满,越有可能产生冲突

Binary file not shown.