写出该无向图的邻接矩阵.
该无向图的邻接矩阵表示为:
E
=
[
0
1
1
1
1
0
1
0
1
1
0
1
1
0
1
0
]
\mathbf{E} = \begin{bmatrix} 0 & 1 & 1 & 1\\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1\\ 1 & 0 & 1 & 0 \end{bmatrix}\quad
E=⎣⎢⎢⎡0111101011011010⎦⎥⎥⎤
定义无向网络.
参考了一下之前学习的内容,应该是这样的。网络就是有权图,而无向网络其实就是有权无向图,那么参考有向网络定义的话,只需要使得每个节点之间的权值相同达到对称,并且可以双向奔赴就好啦~
An directed net is a tuple
G
=
(
V
,
w
)
G = (\mathbf{V}, w)
G=(V,w), where
V
\mathbf{V}
V is the set of nodes,
w
:
V
×
V
→
R
w : \mathbf{V} \times \mathbf{V} \to \mathbb{R}
w:V×V→R is the weight function where
w
(
v
i
,
v
j
)
w(v_i, v_j)
w(vi,vj) is the weight of the edge
(
v
i
,
v
j
)
(v_i, v_j)
(vi,vj) and
∀
⟨
v
i
,
v
j
⟩
⊆
V
×
V
,
w
(
v
i
,
v
j
)
=
w
(
v
j
,
v
i
)
\forall \langle v_i,v_j \rangle \subseteq \mathbf{V} \times \mathbf{V}, w(v_i,v_j) = w(v_j,v_i)
∀⟨vi,vj⟩⊆V×V,w(vi,vj)=w(vj,vi).
12.4 作业
- 自己画一棵树, 将其元组各部分写出来 (特别是函数 p ).
- 针对该树, 将代码中的变量值写出来 (特别是 parent 数组).
-
网上随便找了一棵树来写写看。因为数的名称不重要,重要的是节点的顺序,所以我暂时把每个节点按对应英文字母顺序看待了。
那么一个棵树的元组包括以下三部分:
所有节点的集合: V = { A , B , C , D , E , F , G , H , I , J } \mathbf{V} = \{ \mathrm{A, B, C, D, E, F, G, H, I, J} \} V={A,B,C,D,E,F,G,H,I,J}
唯一的根结点: r = A ∈ V r = \mathrm{A} \in \mathbf{V} r=A∈V
节点之间的 parent 函数关系:
p 0 ( G ) = G , p 1 ( G ) = D , p 2 ( G ) = B , p 3 ( G ) = A = r p^{0}(\mathrm{G}) = \mathrm{G}, p^{1}(\mathrm{G}) = \mathrm{D}, p^{2}(G) = \mathrm{B}, p^{3}(G) = \mathrm{A} = r p0(G)=G,p1(G)=D,p2(G)=B,p3(G)=A=r
p 0 ( H ) = H , p 1 ( H ) = D , p 2 ( H ) = B , p 3 ( H ) = A = r p^{0}(\mathrm{H}) = \mathrm{H}, p^{1}(\mathrm{H}) = \mathrm{D}, p^{2}(\mathrm{H}) = \mathrm{B}, p^{3}(\mathrm{H}) = \mathrm{A} = r p0(H)=H,p1(H)=D,p2(H)=B,p3(H)=A=r
p 0 ( I ) = H , p 1 ( I ) = D , p 2 ( I ) = B , p 3 ( I ) = A = r p^{0}(\mathrm{I}) = \mathrm{H}, p^{1}(\mathrm{I}) = \mathrm{D}, p^{2}(\mathrm{I}) = \mathrm{B}, p^{3}(\mathrm{I}) = \mathrm{A} = r p0(I)=H,p1(I)=D,p2(I)=B,p3(I)=A=r
p 0 ( J ) = J , p 1 ( J ) = E , p 2 ( H ) = C , p 3 ( H ) = A = r p^{0}(\mathrm{J}) = \mathrm{J}, p^{1}(\mathrm{J}) = \mathrm{E}, p^{2}(\mathrm{H}) = \mathrm{C}, p^{3}(\mathrm{H}) = \mathrm{A} = r p0(J)=J,p1(J)=E,p2(H)=C,p3(H)=A=r
p 0 ( F ) = F , p 1 ( F ) = C , p 2 ( F ) = A = r p^{0}(\mathrm{F}) = \mathrm{F}, p^{1}(\mathrm{F}) = C, p^{2}(\mathrm{F}) = \mathrm{A} = r p0(F)=F,p1(F)=C,p2(F)=A=r
由于这个 p p p 关系我不知道怎么表达好,所以只能暂时肤浅地写成这样,是我能写出来尽可能可以表达树的节点的关系的函数形式了。
public class Tree {
/**
* 节点数. 表示节点 v_0 至 v_{n-1}.
*/
int n;
/**
* 根节点. 0 至 n-1.
*/
int root;
/**
* 父节点.
*/
int[] parent;
/**
* 构造一棵树, 第一个节点为根节点, 其余节点均为其直接子节点, 也均为叶节点.
*/
public Tree(int paraN) {
n = paraN;
parent = new int[n];
parent[0] = -1; // -1 即 \phi
}// Of the constructor
}//Of class Tree
Java小白简单理解一下代码中三个变量:
节点数 n: 按照我自己给的树,n 应从 0 一直变化到 9,一共10个节点。 即
V
=
{
A
,
B
,
C
,
D
,
E
,
F
,
G
,
H
,
I
,
J
}
=
{
v
0
,
v
1
,
…
,
v
9
}
\mathbf{V} = \{ \mathrm{A, B, C, D, E, F, G, H, I, J} \} = \{ v_0, v_1, \dots, v_9 \}
V={A,B,C,D,E,F,G,H,I,J}={v0,v1,…,v9}
根结点 root:根结点有且仅有一个, 我们定义为
r
=
0
r = 0
r=0 ,也就是从
A
A
A 开始.
parent函数: 简单写成
p
=
[
−
1
,
0
,
0
,
0
,
1
,
2
,
2
,
3
,
3
,
3
,
4
]
p = [-1, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4]
p=[−1,0,0,0,1,2,2,3,3,3,4].
13.4 作业
- 画一棵三叉树, 并写出它的 child 数组.
- 按照本贴风格, 重新定义树. 提示: 还是应该定义 parent 函数, 字母表里面只有一个元素.
- 根据图、树、 m m m-叉树的学习, 谈谈你对元组的理解.
-
我自己随便画了一个三叉树,凑合看。
由于矩阵一共有 10 个节点,且是三叉树,这个矩阵的 child 矩阵应该为一个 10 × 3 10 \times 3 10×3 的矩阵,根据树的形状以及节点位置,这棵三叉树的child矩阵应该写成:
[ 1 2 3 4 − 1 − 1 5 − 1 − 1 6 − 1 − 1 − 1 − 1 − 1 7 8 9 − 1 − 1 − 1 − 1 − 1 − 1 − 1 − 1 − 1 − 1 − 1 − 1 ] \begin{bmatrix} 1 & 2 & 3 \\ 4 & -1 & -1 \\ 5 & -1 & -1 \\ 6 & -1 & -1 \\ -1 & -1 & -1 \\ 7 & 8 & 9 \\ -1 & -1 & -1 \\ -1 & -1 & -1 \\ -1 & -1 & -1 \\ -1 & -1 & -1 \\ \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1456−17−1−1−1−12−1−1−1−18−1−1−1−13−1−1−1−19−1−1−1−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ -
已经尽力在整个新鲜定义出来了:
-
Let ϕ \phi ϕ be the empty node, a tree is a quadruple T = ( V , r , Σ , p ) \mathbf{T} = (\mathbf{V}, r, \Sigma, p) T=(V,r,Σ,p) where
-
V ≠ ∅ \mathbf{V} \ne \emptyset V=∅ is the set of nodes;
-
r ∈ V r \in \mathbf{V} r∈V is the root node;
-
Σ = { 0 } \Sigma = \{ 0 \} Σ={0} is the alphabet;
-
p : V → V ∪ { ϕ } p : \mathbf{V} \to \mathbf{V} \cup \{ \phi \} p:V→V∪{ϕ} is the parent mapping satisfying
- p ( r ) = ϕ p(r) = \phi p(r)=ϕ;
- ∀ v ∈ V , ∃ 1 s ∈ Σ ∗ s t . p ( v , s ) = r \forall v \in \mathbf{V}, \exists 1 s \in \Sigma^* st. p ( v , s ) = r ∀v∈V,∃1s∈Σ∗st.p(v,s)=r.
其实这里不确定字母表里的唯一一个元素到底是啥,不过不管是什么,只有一个元素的话,都只能从某个节点开始找唯一一个方向的 parent 节点,应该是这样的,感觉好菜啊┭┮﹏┭┮
- 在以往的理解中,元组其实就是对一个待描述的事物建模,将待描述的事物的各个部分,也就是属性包括在一个元组中,就可以将某个抽象的事物描述清楚。其中的每个属性既可以是一个集合, 也可以是一个基本元素。
以“图”为例,我们说这个图是一个二元组,其实是在说一个图由两个因素——节点还有方向确定。
那么对于“树”来说,这个元组中包含有节点的集合,根结点,以及parent函数关系。
“ m m m-叉树”与“树”类似,它的元组中包含有节点的集合,根结点,字母表以及child函数关系。