NOI导刊___图论的基本算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
adjlist=array [vtxptr] of vexnode;
邻接表
1
2
3
4^
2
1
3
5^
3
1
2
4
5
6^
4
1
3
6^
5
2
3
6^
6
3
4
5^
拓扑排序
按照有向图给出的次序关系,将图中顶点排成一 个线性序列,对于有向图中没有限定次序关系的顶点, 则可以人为加上任意的次序关系。由此所得顶点的线 性序列称之为拓扑有序序列
1 0 0 −1 −1 0 1
A
=
−1 0 0
1 −1 0
0 1 −1
0 0 1
0 1 0
0 0
−1 1
−01
邻接表
表节点 type arcptr=^arcnode; arcnode=record adjvex:vtxptr; nextarc:arcptr; info: … {和弧有关的其他信息} end; vex=Record vexdata: …{和顶点有关的其他信息} firstarc:arcptr; end;
以可允许的10个状态向量作为顶点,将可能互相 转移的状态用线段连接起来构成一个图.
根据此图便可找到渡河方法.
(1,1,1,1) (1,1,1,0) (1,1,0,1) (1,0,1,1) (1,0,1,0) (0,0,0,0) (0,0,0,1) (0,0,1,0) (0,1,0,0) (0,1,0,1)
A1 A6 A3 A7 A2 A8 A5 A10; A1 A6 A3 A9 A4 A8 A5 A10.
图的矩阵表示
1, aij = 0,
vij ∈ E; vij ∉ E.
0 1 0 1
A
=
0 1 1
0 0 0
1 0 1
0
1 0
权矩阵
aij
=
F
(vi
v
j
),
0
∞,
vij ∈ E;
i = j; vij ∉ E.
endF;
拓扑排序
核心问题:给一些序关系,排出全序!
一个一个排 先排最大 然后第二大… 具体实现?
每次取0出度点 枚举所有点吗? 0出度只可能是1出度变来的! O(n+m)
神经网络
在兰兰的模型中,神经网络就是一张有向图,图中的节点 称为神经元,而且两个神经元之间至多有一条边相连,下 图是一个神经元的例子:
例如:对于有向图
可求得拓扑有序序列: ABCD 或 ACBD
对于下列有向图
B
A
D
C
不能求得它的拓扑有序序列。
因为图中存在一个回路 {B, C, D}
求拓扑序列
FUNC toporder(var dig:adjlisttp):boolean; init(top2); m:=0; ve[1..n]:=0 while Not empty(top1) do [ j:=pop(top1); push(top2,j); m:=m+1; k:=firstadj(dig,j); while k<>0 do [ 入度(k):=入度(k)-1; if 入度(k)=0 then push(top1,k); if ve[j]+dut(<j,k>)>ve[k] then ve[k]:=ve[j]+dut(<j,k>); k:=nextadj(dig,j,k) ] ] if m<n then return(false) else return(true);
图中,X1—X3是信息输入渠道,Y1-Y2是信息输出渠道, C1表示神经元目前的状态,Ui是阈值,可视为神经元的一个 内在参数。
神经元按一定的顺序排列,构成整个神经网络。在兰兰 的模型之中,神经网络中的神经无分为几层;称为输入层、 输出层,和若干个中间层。每层神经元只向下一层的神经元 输出信息,只从上一层神经元接受信息。
【输入格式】
第一行是两个整数n(1≤n≤20)和p。接下来n行,每行两个 整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入 层的神经元开始时状态必然为0。再下面P行,每行由两个整 数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij 。
【输出格式】
输出包含若干行,每行有两个整数,分别对应一个神经元的 编号,及其最后的状态,两个整数间以空格分隔。仅输出最 后状态非零的输出层神经元状态,并且按照编号由小到大顺 序输出!
(0,1,0,1) (0,1,0,0) (0,0,1,0) (0,0,0,1) (0,0,0,0) (1,0,1,0) (1,0,1,1) (1,1,0,1) (1,1,1,0) (1,1,1,1)
河西=(人,狼,羊,菜) 河东=(人,狼,羊,菜)
将10个顶点分别记为A1, A2, …, A10 ,则渡河问题化为在该 图中求一条从A1到A10的路. 从图中易得到两条路:
解:用四维0-1向量表示(人,狼,羊,菜)在河西岸的 状态(在河西岸则分量取1,否则取0),共有24 =16 种状态. 在河东岸的状态类似记作.
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允 许的,从而对应状态(1,0,0,1), (1,1,0,0), (1,0,0,0)也是 不允许的.
0 6 ∞ 8
A
=
∞ 3 4
0 ∞ ∞
7 0 5
∞
2 0
无向图G的权矩阵A是一个对称矩阵.
0 6 3 4
A
=
6 3 4
0 7 ∞
7 0 2
∞
来自百度文库
2 0
关联矩阵
1, 若vi是ej的始点; aij = −1, 若vi是ej的终点;
0, 若vi与ej不关联.
有向图的关联矩阵每列的元素中有且仅有一个1,有且仅有一 个 - 1.
图论基本算法
图
图的概念 G=(V,E)
图的基本概念 有向图、顶点、入度、出度、弧、环 无向图、边、路径、顶点的度、邻接 简单图、完全图 平面图、二分图
过河
• 一摆渡人欲将一只狼,一头羊,一篮菜从河 西渡过河到河东.由于船小,一次只能带一 物过河,并且狼与羊,羊与菜不能独处.
• 给出渡河方法.
神经网络
兰兰规定,Ci服从公式:(其中n是网络中所有神经元的数目)
∑ Ci = WjiC j − Ui ( j,i)∈E
公式中的Wji(可能为负值)表示连接j号神经元和 i号神经 元的边的权值。当 Ci大于0时,该神经元处于兴奋状态,否 则就处于平静状态。当神经元处于兴奋状态时,下一秒它会 向其他神经元传送信号,信号的强度为Ci。 如此.在输入层 神经元被激发之后,整个网络系统就在信息传输的推动下进 行运作。现在,给定一个神经网络,及当前输入层神经元的 状态(Ci),要求你的程序运算出最后网络输出层的状态。
邻接表
1
2
3
4^
2
1
3
5^
3
1
2
4
5
6^
4
1
3
6^
5
2
3
6^
6
3
4
5^
拓扑排序
按照有向图给出的次序关系,将图中顶点排成一 个线性序列,对于有向图中没有限定次序关系的顶点, 则可以人为加上任意的次序关系。由此所得顶点的线 性序列称之为拓扑有序序列
1 0 0 −1 −1 0 1
A
=
−1 0 0
1 −1 0
0 1 −1
0 0 1
0 1 0
0 0
−1 1
−01
邻接表
表节点 type arcptr=^arcnode; arcnode=record adjvex:vtxptr; nextarc:arcptr; info: … {和弧有关的其他信息} end; vex=Record vexdata: …{和顶点有关的其他信息} firstarc:arcptr; end;
以可允许的10个状态向量作为顶点,将可能互相 转移的状态用线段连接起来构成一个图.
根据此图便可找到渡河方法.
(1,1,1,1) (1,1,1,0) (1,1,0,1) (1,0,1,1) (1,0,1,0) (0,0,0,0) (0,0,0,1) (0,0,1,0) (0,1,0,0) (0,1,0,1)
A1 A6 A3 A7 A2 A8 A5 A10; A1 A6 A3 A9 A4 A8 A5 A10.
图的矩阵表示
1, aij = 0,
vij ∈ E; vij ∉ E.
0 1 0 1
A
=
0 1 1
0 0 0
1 0 1
0
1 0
权矩阵
aij
=
F
(vi
v
j
),
0
∞,
vij ∈ E;
i = j; vij ∉ E.
endF;
拓扑排序
核心问题:给一些序关系,排出全序!
一个一个排 先排最大 然后第二大… 具体实现?
每次取0出度点 枚举所有点吗? 0出度只可能是1出度变来的! O(n+m)
神经网络
在兰兰的模型中,神经网络就是一张有向图,图中的节点 称为神经元,而且两个神经元之间至多有一条边相连,下 图是一个神经元的例子:
例如:对于有向图
可求得拓扑有序序列: ABCD 或 ACBD
对于下列有向图
B
A
D
C
不能求得它的拓扑有序序列。
因为图中存在一个回路 {B, C, D}
求拓扑序列
FUNC toporder(var dig:adjlisttp):boolean; init(top2); m:=0; ve[1..n]:=0 while Not empty(top1) do [ j:=pop(top1); push(top2,j); m:=m+1; k:=firstadj(dig,j); while k<>0 do [ 入度(k):=入度(k)-1; if 入度(k)=0 then push(top1,k); if ve[j]+dut(<j,k>)>ve[k] then ve[k]:=ve[j]+dut(<j,k>); k:=nextadj(dig,j,k) ] ] if m<n then return(false) else return(true);
图中,X1—X3是信息输入渠道,Y1-Y2是信息输出渠道, C1表示神经元目前的状态,Ui是阈值,可视为神经元的一个 内在参数。
神经元按一定的顺序排列,构成整个神经网络。在兰兰 的模型之中,神经网络中的神经无分为几层;称为输入层、 输出层,和若干个中间层。每层神经元只向下一层的神经元 输出信息,只从上一层神经元接受信息。
【输入格式】
第一行是两个整数n(1≤n≤20)和p。接下来n行,每行两个 整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入 层的神经元开始时状态必然为0。再下面P行,每行由两个整 数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij 。
【输出格式】
输出包含若干行,每行有两个整数,分别对应一个神经元的 编号,及其最后的状态,两个整数间以空格分隔。仅输出最 后状态非零的输出层神经元状态,并且按照编号由小到大顺 序输出!
(0,1,0,1) (0,1,0,0) (0,0,1,0) (0,0,0,1) (0,0,0,0) (1,0,1,0) (1,0,1,1) (1,1,0,1) (1,1,1,0) (1,1,1,1)
河西=(人,狼,羊,菜) 河东=(人,狼,羊,菜)
将10个顶点分别记为A1, A2, …, A10 ,则渡河问题化为在该 图中求一条从A1到A10的路. 从图中易得到两条路:
解:用四维0-1向量表示(人,狼,羊,菜)在河西岸的 状态(在河西岸则分量取1,否则取0),共有24 =16 种状态. 在河东岸的状态类似记作.
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允 许的,从而对应状态(1,0,0,1), (1,1,0,0), (1,0,0,0)也是 不允许的.
0 6 ∞ 8
A
=
∞ 3 4
0 ∞ ∞
7 0 5
∞
2 0
无向图G的权矩阵A是一个对称矩阵.
0 6 3 4
A
=
6 3 4
0 7 ∞
7 0 2
∞
来自百度文库
2 0
关联矩阵
1, 若vi是ej的始点; aij = −1, 若vi是ej的终点;
0, 若vi与ej不关联.
有向图的关联矩阵每列的元素中有且仅有一个1,有且仅有一 个 - 1.
图论基本算法
图
图的概念 G=(V,E)
图的基本概念 有向图、顶点、入度、出度、弧、环 无向图、边、路径、顶点的度、邻接 简单图、完全图 平面图、二分图
过河
• 一摆渡人欲将一只狼,一头羊,一篮菜从河 西渡过河到河东.由于船小,一次只能带一 物过河,并且狼与羊,羊与菜不能独处.
• 给出渡河方法.
神经网络
兰兰规定,Ci服从公式:(其中n是网络中所有神经元的数目)
∑ Ci = WjiC j − Ui ( j,i)∈E
公式中的Wji(可能为负值)表示连接j号神经元和 i号神经 元的边的权值。当 Ci大于0时,该神经元处于兴奋状态,否 则就处于平静状态。当神经元处于兴奋状态时,下一秒它会 向其他神经元传送信号,信号的强度为Ci。 如此.在输入层 神经元被激发之后,整个网络系统就在信息传输的推动下进 行运作。现在,给定一个神经网络,及当前输入层神经元的 状态(Ci),要求你的程序运算出最后网络输出层的状态。