布谷鸟筛选器
布谷鸟筛选器
动态集合上的操作: - SEARCH(S, k):查询, - INSERT(S, x):插入 - DELETE(S, x):删除 - MINMUM(S):查询最小元素的指针 - MAXMUM(S):查询最大元素的指针 - PREDECESSOR(S, x):查询x前一个元素的指针
栈:假设用\(S[1,2,3,...n]\)表示一个可容纳n个元素的栈
先进后出(FILO)
插入操作称作:PUSH, 删除操作称作POP
def STRACK_EMPTY(S): |
队列:
先进先出(FIFO)
插入操作称作:ENQUEUE,删除称作:DEQUEUE
def ENQUEUE(Q, x): |
与数组不同的是,链表的顺序是由各个对象里的指针决定的。
# 搜索 |
图\(G=(V, E)\),其中\(V\)表示结点,\(E\)表示边
邻接链表: 表示稀疏图时,非常紧凑
稀疏图:边的条数(\(|E|\))远远小于边的结点数(\(|V|\))的图
邻接矩阵:能快速查询两个结点之间是否有相连
矩阵的行号表示起始点,列号表示终点
环路
前驱结点
前驱子图
松弛(relaxation)技术:对于每个结点\(v\)来说,我们维持一个属性\(v.d\),用来记录从源结点\(s\)到结点\(v\)的最短路径权重的上界。我们称\(v.d\)为s到\(v\)的最短路径估计
最短路径估计和前驱结点进行初始化:
INITIALIZE-SINGLE-SOURCE(G, s): |
对一条边(\(u\), \(v\))的松弛过程:
RELAX(u, v, w): |
其中 w(u, v)
表示:点u到点v的权重 v.d:
表示从源s到v的最短距离 v.pi: 表示v的上一个节点
边的权重可以为负值
给定带权重的有向图\(G=(V, E)\)和权重函数\(w: E\rightarrow R\)
算法返回一个布尔值
BELLMAN-FORD(G, w, s): |
在图24-4中运行Bellman-Ford算法,使用结点\(z\)作为源结点。在每一遍松弛过程中以图中相同的次序对每条边进行松弛,给出每遍松弛操作后的\(d\)值和\(\pi\)值。然后,把边\((z, x)\)的权重改为4, 再次运行该算法,这次使用\(s\)作为结点。
使用\(z\)作为源节点:
\(d\)的值:
松弛次数 | \(s\) | \(t\) | \(x\) | \(y\) | \(z\) |
---|---|---|---|---|---|
0 | \(\infty\) | \(\infty\) | \(\infty\) | \(\infty\) | 0 |
1 | 2 | \(\infty\) | 7 | \(\infty\) | 0 |
2 | 2 | 5 | 7 | 9 | 0 |
3 | 2 | 5 | 6 | 9 | 0 |
4 | 2 | 4 | 6 | 9 | 0 |
\(\pi\)的值:
\(s\) | \(t\) | \(x\) | \(y\) | \(z\) |
---|---|---|---|---|
NIL | NIL | NIL | NIL | NIL |
\(z\) | NIL | \(x\) | NIL | NIL |
\(z\) | \(x\) | \(x\) | \(s\) | NIL |
\(z\) | \(x\) | \(y\) | \(s\) | NIL |
\(z\) | \(x\) | \(y\) | \(s\) | NIL |
修改权重之后
证明推论24.3
证明:
给定\(G=(V, E)\)是一个带权重且没有权重为负值的环路的有向图,对于所有结点\(v\in V\),从源结点\(s\)到结点\(v\)之间的最短路径中,包含边的条数的最大值为\(m\)。(这里,判断最短路径的根据是权重,不是边的条数。)请对算法BELLMAN-FORD进行简单修改,可以让其在\(m+1\)遍松弛操作之后种植,即使\(m\)不是事先知道的一个值。
修改BELLMAN-FORD算法,使其对于所有结点v来说,如果从源节点\(s\)到结点\(v\)的一条路径上存在权重为负值的环路,则将\(v.d\)的值设置为\(-\infty\)
设\(G=(V, E)\)为一个带权重的有向图,其权重函数为\(w: E \rightarrow R\)。请给出一个时间复杂度为\(O(VE)\)的算法,对于每个结点\(v \in V\),计算出数值$^*(v) = {(u, v)} $
假定\(G=(V, E)\)为一个带权重的有向图,并且图中存在一个权重为负值的环路。给出与i个有限的算法来列出所有该环路上的结点。请证明算法的正确性。
创建10个goroutine,id分别是0,1,2,3...9
每个goroutine只能打印最后一位是自己id号的数字, 例如: 3号只能打印3, 13, 23, 33...
编写一个程序,依次打印1-10000
第一想法是全局锁,如果只用一个锁,那就是10个goroutine一起抢锁,10个协程加10个锁的话,还要交替解锁。所以选择用channel,goroutine交替向下个管道发送消息。
读取空的channel会根据channel类型返回空的数据,所以需要判断channel读取是否成功,i, ok <- c,判断ok的值
解析题目,10个goroutine,但是需要依次打印1-10000,
import ( |
# 输出: |
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接受数据分包的网络设备对应的MAC地址。
不能用于IPv6
自动设置IP地址、同一管理IP地址分配。
是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术
数据链路可以视为网络传输的最小单位
将信号与二进制0、1的转换是物理层的责任
数据链路层处理的数据也不是单纯的0、1的序列,该层把他们集合为一个叫做“帧”的块,再进行传输
数据链路相关技术:
传输方式: