数学表达式の学习笔记
1 基础格式
不加粗斜体, A A A。
一个公式既有斜体又有正体,注意{}的范围,如{\rm Hom}(U,V) H o m ( U , V ) {\rm Hom}(U,V) Hom(U,V)。
删除,用sout或cancel,得到 a , a \sout a, \cancel a a,a 。
不加粗正体,\rm{A} → A \to\rm{A} →A。rm:roman。(这里的 → \to →只表示得到的意思,此处不表示集合映射到集合)
加粗斜体,\boldsymbol{A}
→
A
\to\boldsymbol{A}
→A,\bm{A}
→
A
\to\bm{A}
→A。
其中,bm:Access bold symbols in maths mode. \bm{·} is rather more careful in the way it does things than \boldsymbol{·}.
≡ ≈ = d e f = \equiv \approx \overset{\mathrm{def}}{=} \xlongequal{\quad\quad} ≡≈=def
\mathbf{A}
→
A
\to\mathbf{A}
→A。bf:boldface。
PS:对于矩阵,个人更推荐 \bm{·}的
A
\bm{A}
A,而不是\mathbf{·}的
A
\mathbf{A}
A。如果是纯粹的数学中,集合则是最普通的不加粗斜体
A
A
A。
如果集合在后文中都会以某种矩阵方式出现,那么集合以大写正体加粗表示是合理的(但依然可以斜体加粗),如果集合以向量在后文出现,那么以小写黑体加粗是合理的,如果后文中依然是最纯粹的集合,建议大写斜体不加粗。
\dots → … \to\dots →… a \空格 b → a b \to a\ b →a b \langle\rangle → ⟨ ⟩ \to\langle\rangle →⟨⟩ \pm → ± \to\pm →±,即plus minus
\mathbb{R} → R \to\mathbb{R} →R,双线字体(也称空体字母)通常用于表示数域(对加减乘除封闭的数集)。如有理数集 Q \mathbb{Q} Q,实数集 R \mathbb{R} R,复数集 C \mathbb{C} C,整数不是数域,但因为使用频率很高,也记作 Z \mathbb{Z} Z,同理自然数集 N \mathbb{N} N。bb,blackboard bold。
\mathcal{R} → R \to\mathcal{R} →R,花写体(通常个也称手写体、花体,尽管实际上存在差异)是集合论中表示集族的专属,如集合 A A A的幂集是集族,记作 A = 2 A \mathcal{A}=2^{\mathbf{A}} A=2A。cal,calligraphy。
X = { x i } i = 1 n = { x 1 , x 2 , … , x n } \mathbf{X} = \{x_i\}_{i = 1}^n = \{x_1, x_2, \dots, x_n\} X={xi}i=1n={x1,x2,…,xn}.
\emptyset → ∅ \to\emptyset →∅ \underline{\mathbf{A}} → A ‾ \to\underline{\mathbf{A}} →A
\overline{\mathbf{X}} = \mathbf{U} \setminus \mathbf{X} → X ‾ = U ∖ X \to\overline{\mathbf{X}} = \mathbf{U} \setminus \mathbf{X} →X=U∖X.
\bigcup_{i = 1}^n \mathbf{X}_i → ⋃ i = 1 n X i \to\bigcup_{i = 1}^n \mathbf{X}_i →⋃i=1nXi.
\sum_{i = 1}^n i = 1 + 2 + \dots + n = \frac{n (n + 1)}{2} → ∑ i = 1 n i = 1 + 2 + ⋯ + n = n ( n + 1 ) 2 \to \sum_{i = 1}^n i = 1 + 2 + \dots + n = \frac{n (n + 1)}{2} →∑i=1ni=1+2+⋯+n=2n(n+1).
B ⊆ A \mathbf B\subseteq \mathbf A B⊆A 与 B ∈ 2 A \mathbf B \in 2^{\mathbf{A}} B∈2A 等价。
\mathbf{A} \times \mathbf{B} \ne \mathbf{B} \times \mathbf{A} → A × B ≠ B × A \to \mathbf{A} \times \mathbf{B} \ne \mathbf{B} \times \mathbf{A} →A×B=B×A.
f : R → R , x ↦ x 2 + 1 f:\mathbb{R} \to \mathbb{R}, \\ \ \ \ \ \ \ x \mapsto x^2 + 1 f:R→R, x↦x2+1.
练习:
1 A = { 3 , 5 } \mathbf{A}=\{3,5\} A={3,5},写出 2 A 2^{\mathbf{A}} 2A: 2 A = { ∅ , { 3 } , { 5 } , { 3 , 5 } } 2^{\mathbf{A}} = \{\emptyset,\{3\},\{5\},\{3,5\}\} 2A={∅,{3},{5},{3,5}}
2 展开 2 ∅ 2^{\emptyset} 2∅ : 2 ∅ = { ∅ } 2^{\emptyset}=\{\emptyset\} 2∅={∅}
3 令 A = { 5 , 6 , 7 , 8 , 9 } \mathbf{A} = \{5, 6, 7, 8, 9\} A={5,6,7,8,9},写出 A \mathbf{A} A的其它两种表示法: A = { 5 , 6 , … , 9 } = { x ∈ N ∣ 5 ≤ x ≤ 9 } \mathbf{A} = \{5, 6, \dots, 9\}= \{x\in\mathbb{N}\ \vert\ 5\leq x\leq9\} A={5,6,…,9}={x∈N ∣ 5≤x≤9}
4 矩阵乘法
[
3
1
4
2
0
5
]
×
[
3
2
5
1
1
3
0
2
]
=
[
10
9
15
5
14
14
20
8
5
15
0
10
]
\left[ \begin{array} {lr} %lr表示第一列left左对齐,第二列right右对齐,若没写则后面的列center居中c对齐 3 & 1 \\ 4 & 2 \\ 0 & 5 \end{array} \right] \times \left[\begin{array}{lcr} 3 & 2 & 5 & 1 \\ 1 & 3 & 0 & 2 \end{array}\right] = \left[\begin{array}{lcr}10 & 9 & 15 & 5 \\ 14 & 14 & 20 & 8 \\ 5 & 15 & 0 & 10\end{array}\right]
340125
×[31235012]=
1014591415152005810
5 各种矩阵
pmatrix 圆括号矩阵; bmatrix 方括号矩阵; Bmatrix 花括号矩阵;
matrix 无括号矩阵排列; vmatrix 行列式; Vmatrix 范数:
\begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}
\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}
\begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix}
\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix}
\begin{vmatrix} a & b \\ c & d \end{vmatrix}
\begin{Vmatrix} i & 0 \\ 0 & -i \end{Vmatrix}
( 0 − i i 0 ) [ 0 − 1 1 0 ] { 1 0 0 − 1 } 0 1 1 0 ∣ a b c d ∣ ∥ i 0 0 − i ∥ \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix} \ \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} \ \begin{vmatrix} a & b \\ c & d \end{vmatrix} \begin{Vmatrix} i & 0 \\ 0 & -i \end{Vmatrix} (0i−i0)[01−10]{100−1} 0110 acbd i00−i
2 二元关系
(一个从集合 A \mathbf{A} A到集合 B \mathbf{B} B的)二元关系的本质是一种集合,它是 A × B \mathbf{A}\times \mathbf{B} A×B 的子集。因此 a 、 b a、b a、b满足某种关系,实质为元素 ( a , b ) (a,b) (a,b)属于这个关系的集合,即 ( a , b ) ∈ R (a,b)\in\mathbf{R} (a,b)∈R。举例:
- 包含关系
A = { ∅ , { 1 } } \mathbf{A}=\{\emptyset,\{1\}\} A={∅,{1}}, B = { { 1 } , { 2 } , { 1 , 2 } } \mathbf{B}=\{\{1\},\{2\},\{1,2\}\} B={{1},{2},{1,2}}
从集合 A \mathbf{A} A到集合 B \mathbf{B} B的 ⊆ \subseteq ⊆关系集合是
{ ( ∅ , { 1 } ) , ( ∅ , { 2 } ) , ( ∅ , { 1 , 2 } ) , ( { 1 } , { 1 } ) } , ( { 1 } , { 1 , 2 } ) } \{(\emptyset,\{1\}) , (\emptyset,\{2\}) , (\emptyset,\{1,2\}) ,(\{1\},\{1\}) \} ,(\{1\},\{1,2\}) \} {(∅,{1}),(∅,{2}),(∅,{1,2}),({1},{1})},({1},{1,2})} - 属于关系
A = { 0 , 1 } \mathbf{A}=\{0, 1\} A={0,1}, B = { { 1 } , { 2 } , { 1 , 2 } } \mathbf{B}=\{\{1\},\{2\},\{1,2\}\} B={{1},{2},{1,2}}
从集合 A \mathbf{A} A到集合 B \mathbf{B} B的 ∈ \in ∈关系集合是
{ ( 1 , { 1 } ) , ( 1 , { 1 , 2 } ) } \{(1,\{1\}) , (1,\{1,2\}) \} {(1,{1}),(1,{1,2})}
这两个例子中,包含和属于其实并不重要,因为包含是集族到集族(元素是集合;集族本身也是集合)的关系,属于是集合到集族的关系。也即关系是两个集合得到的一个新集合,它是两个集合笛卡尔集的子集。
我们更感兴趣的是集合到它自身的关系,也直接称集合中(集合上)的关系,即从集合 A \mathbf{A} A到集合 A \mathbf{A} A的关系 R \mathbf{R} R,它是 A × A \mathbf{A}\times \mathbf{A} A×A 的子集。
-
等价关系 equivalence relation ∼ \sim ∼
满足:
i 自反性reflexivity: ∀ a ∈ A \forall a\in \mathbf{A} ∀a∈A,有 ( a , a ) ∈ R (a,a) \in \mathbf{R} (a,a)∈R;
ii 对称性: ∀ a , b ∈ A \forall a,b \in \mathbf{A} ∀a,b∈A,如果 ( a , b ) ∈ R (a,b) \in \mathbf{R} (a,b)∈R,则 ( b , a ) ∈ R (b,a) \in \mathbf{R} (b,a)∈R;
iii 传递性: ∀ a , b , c ∈ A \forall a,b,c\in \mathbf{A} ∀a,b,c∈A, 如果 ( a , b ) , ( b , c ) ∈ R (a,b),(b,c) \in \mathbf{R} (a,b),(b,c)∈R,则 ( a , c ) ∈ R (a,c) \in \mathbf{R} (a,c)∈R. -
偏序关系 partial order relation ⪯ \preceq ⪯
满足:
i 自反性
ii 反对称性 anti-symmetry: ∀ a , b ∈ A \forall a,b \in \mathbf{A} ∀a,b∈A,若 ( a , b ) ∈ R , ( b , a ) ∈ R (a,b)\in\mathbf{R},(b,a) \in \mathbf{R} (a,b)∈R,(b,a)∈R,则 a = b a=b a=b。
或者换一种角度:对 A \mathbf{A} A内任意两不同元素 a , b a,b a,b,则 R \mathbf{R} R中最多含有 ( a , b ) , ( b , a ) (a,b),(b,a) (a,b),(b,a)中的一个。(可以直观理解为关系表示的矩阵中除主对角线外的任意一对元素( a i j , a j i a_{ij},a_{ji} aij,aji)中最多只能取一个)
iii 传递性 -
全序关系 total ordering relation <
i 可比较性: ∀ a , b ∈ A \forall a,b \in \mathbf{A} ∀a,b∈A,如果 a ≠ b a\ne b a=b,则 ( a , b ) ∈ R (a,b)\in\mathbf{R} (a,b)∈R 或 ( b , a ) ∈ R (b,a)\in\mathbf{R} (b,a)∈R.
ii 非自反性 irreflexivity: ∀ a ∈ A \forall a\in \mathbf{A} ∀a∈A,有 ( a , a ) ∉ R (a,a) \notin \mathbf{R} (a,a)∈/R.
iii 传递性.
- 模
n
n
n同余关系
n n n是给定的一个大于1的整数。设 A ∈ Z \mathbf {A} \in \mathbb{Z} A∈Z,首先表示 A \mathbf {A} A 上的 ”模 n n n同余“ 关系 R = { ( a , b ) ∈ A × A ∣ a ≡ b ( m o d n ) } \mathbf {R}=\{ (a,b)\in \mathbf{A}\times \mathbf{A} \ | \ a\equiv b({\rm mod} \ n) \} R={(a,b)∈A×A ∣ a≡b(mod n)}上式中 a ≡ b ( m o d n ) a\equiv b({\rm mod} \ n) a≡b(mod n)表示 a a a与 b b b模 n n n同余。
可以证明: A \mathbf {A} A 上的 ”模 n n n同余“ 关系是一种等价关系。
自反性: a a a与 b b b模 n n n同余,则 n n n整除 a − b a-b a−b。 n n n可以整除 a − a = 0 a-a=0 a−a=0,即 a ≡ a ( m o d n ) a\equiv a({\rm mod} \ n) a≡a(mod n),满足自反性。
对称性: ∀ a , b ∈ A \forall a,b \in \mathbf{A} ∀a,b∈A,如果 a ≡ b ( m o d n ) a\equiv b({\rm mod} \ n) a≡b(mod n),则 a − b = k ⋅ n a-b=k·n a−b=k⋅n,则 b − a = − k ⋅ n b-a=-k·n b−a=−k⋅n,即 b ≡ a ( m o d n ) b\equiv a({\rm mod} \ n) b≡a(mod n), ( b , a ) ∈ R (b,a) \in \mathbf{R} (b,a)∈R。
传递性,同理可证。
有了集合
A
\mathbf{A}
A中的等价关系
R
\mathbf{R}
R后,就自然有了基于等价关系
R
\mathbf{R}
R的等价类,任取
a
∈
A
a\in \mathbf{A}
a∈A,集合
{
x
∈
A
∣
(
x
,
a
)
∈
R
}
\{ x\in\mathbf{A} \ | \ (x,a)\in\mathbf{R} \}
{x∈A ∣ (x,a)∈R}就是一个等价类。
以集合
{
1
,
2
,
3
,
4
,
5
}
\{1,2,3,4,5\}
{1,2,3,4,5}上的模3同余关系
R
\mathbf{R}
R为例,
R
=
{
(
1
,
1
)
,
(
2
,
2
)
,
…
,
(
5
,
5
)
,
(
1
,
4
)
,
(
4
,
1
)
,
(
2
,
5
)
,
(
5
,
2
)
}
\mathbf{R}=\{(1,1),(2,2),\dots,(5,5), (1,4) , (4,1) ,(2,5), (5,2) \}
R={(1,1),(2,2),…,(5,5),(1,4),(4,1),(2,5),(5,2)},其不同的(1和4、2和5得到的等价类相同)等价类只有3个:
{
3
}
\{ 3\}
{3}、
{
1
,
4
}
\{ 1,4\}
{1,4}、
{
2
,
5
}
\{ 2,5\}
{2,5}。
可以看到等价类具有这些性质:
- 每个等价类是 A \mathbf{A} A中的一个子集;
- 任何两个等价类要么相同,要么互不相交;
- 集 A \mathbf{A} A是一切不相交等价类的并集。
上面第3点进一步理解,一切按等价关系 R \mathbf{R} R所产生的等价类构成了 A \mathbf{A} A上的一个划分。反过来,对 A \mathbf{A} A的任何一个划分(partition,是一个集族),必然存在一个 A \mathbf{A} A上的等价关系 R \mathbf{R} R。该等价关系可以这样来确定:规定划分(集族)的一个元素(集合)中的任意 a , b a,b a,b,有 ( a , b ) ∈ R (a,b)\in\mathbf{R} (a,b)∈R。比如上面的例子中,划分 { { 3 } , { 1 , 4 } , { 2 , 5 } } \{\{ 3\},\{ 1,4\},\{ 2,5\}\} {{3},{1,4},{2,5}}的等价关系为 R = { ( 1 , 1 ) , ( 2 , 2 ) , . . . , ( 5 , 5 ) , ( 1 , 4 ) , ( 4 , 1 ) , ( 2 , 5 ) , ( 5 , 2 ) } \mathbf{R}=\{(1,1),(2,2),...,(5,5), (1,4), (4,1) ,(2,5), (5,2) \} R={(1,1),(2,2),...,(5,5),(1,4),(4,1),(2,5),(5,2)}。可以看到,该等价关系是唯一的。
定义:设
R
\mathbf{R}
R是集合
A
\mathbf{A}
A上的关系,若存在关系
R
\mathbf{R}
R的具有某种性质
P
P
P(如自反性、对称性等)的 闭包,则
它是集合
A
\mathbf{A}
A上包含关系
R
\mathbf{R}
R的具有性质
P
P
P的关系
S
\mathbf{S}
S,并且
S
\mathbf{S}
S是每一个包含
R
\mathbf{R}
R的具有性质
P
P
P的
A
×
A
\mathbf{A}\times \mathbf{A}
A×A上的最小子集。
从上面的定义可知,关系
R
\mathbf{R}
R的(具有性质
P
P
P的)闭包是集合
A
\mathbf{A}
A上包含关系
R
\mathbf{R}
R的且具有性质
P
P
P的最小关系。举例:
A
=
{
1
,
2
,
3
}
\mathbf{A} = \{ 1,2,3 \}
A={1,2,3}上的关系
R
=
{
(
1
,
1
)
,
(
1
,
2
)
,
(
2
,
3
)
}
\mathbf{R}=\{ (1,1),(1,2),(2,3)\}
R={(1,1),(1,2),(2,3)}不是自反、对称、传递的,
A
\mathbf{A}
A上的
恒等关系(identity relation): I A = { ( x , x ) ∣ x ∈ A } = { ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) } , \mathbf{I}_A=\{ (x, x) \vert x \in \mathbf{A} \}= \{ (1,1),(2,2),(3,3) \}, IA={(x,x)∣x∈A}={(1,1),(2,2),(3,3)},全域关系(universal relation): E A = { ( x , y ) ∣ x , y ∈ A } = A × A = { ( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 2 , 3 ) ( 3 , 1 ) , ( 3 , 2 ) , ( 3 , 3 ) } , \mathbf{E}_A=\{ (x, y) \vert x,y \in \mathbf{A} \} = \mathbf{A}\times \mathbf{A} = \{ (1,1),(1,2),(1,3),(2,1),(2,2),(2,3)(3,1),(3,2),(3,3) \}, EA={(x,y)∣x,y∈A}=A×A={(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)(3,1),(3,2),(3,3)}, 关系 R \mathbf{R} R的:
· R 0 = I A = { ( x , x ) ∣ x ∈ A } \mathbf{R}^0 = \mathbf{I}_A = \{(x, x) \vert x \in \mathbf{A} \} R0=IA={(x,x)∣x∈A};
· 逆关系: R − 1 = { ( b , a ) ∣ ( a , b ) ∈ R } = { ( 1 , 1 ) , ( 2 , 1 ) , ( 3 , 2 ) } \mathbf{R}^{-1}=\{(b,a)\ |\ (a,b)\in \mathbf{R} \} = \{(1,1),(2,1),(3,2) \} R−1={(b,a) ∣ (a,b)∈R}={(1,1),(2,1),(3,2)};
· 补关系: R ‾ = { ( a , b ) ∈ U ∣ ( a , b ) ∉ R } \overline{\mathbf{R}}=\{ (a,b) \in \mathbf{U} | \ (a,b)\notin \mathbf{R} \} R={(a,b)∈U∣ (a,b)∈/R};
· 自反闭包(Reflexive closure) : r ( R ) = R ∪ I A = { ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 3 ) , ( 2 , 2 ) , ( 3 , 3 ) } r(\mathbf{R}) =\mathbf{R} \cup \mathbf{I}_A = \{ (1,1),(1,2),(2,3),(2,2),(3,3)\} r(R)=R∪IA={(1,1),(1,2),(2,3),(2,2),(3,3)};
· 对称闭包(Symmetric closure): s ( R ) = R ∪ R − 1 = { ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 1 ) , ( 2 , 3 ) , ( 3 , 2 ) } s(\mathbf{R})= \mathbf{R}\cup \mathbf{R}^{-1}= \{ (1,1),(1,2),(2,1),(2,3),(3,2)\} s(R)=R∪R−1={(1,1),(1,2),(2,1),(2,3),(3,2)};
· 传递闭包(Transitive closure) :
t
(
R
)
=
⋃
i
=
1
∞
R
i
=
{
(
1
,
1
)
,
(
1
,
2
)
,
(
2
,
3
)
,
(
1
,
3
)
}
t(\mathbf{R}) = \bigcup_{i = 1}^{\infty} \mathbf{R}^i = \{ (1,1),(1,2),(2,3),(1,3)\}
t(R)=⋃i=1∞Ri={(1,1),(1,2),(2,3),(1,3)}.
需要指出的是,构造关系的传递闭包比构造自反闭包和对称闭包要复杂,只是这里的例子很简单。
对于有限集合
A
\mathbf{A}
A上的关系
R
\mathbf{R}
R,存在一个正整数
s
s
s,使得
t
(
R
)
=
⋃
i
=
1
s
R
i
t(\mathbf{R}) = \bigcup_{i = 1}^{s} \mathbf{R}^i
t(R)=⋃i=1sRi,且
s
s
s不超过
A
\mathbf{A}
A的基数(元素个数)。
关于最多
∣
A
∣
|\mathbf{A}|
∣A∣次的说明,对于任意的序对
(
i
,
j
)
(i,j)
(i,j),如果
i
≠
j
i\ne j
i=j,则
(
i
,
j
)
(i,j)
(i,j)传递完成后,至少还可加一步
(
i
,
i
)
→
(
i
,
j
)
(i,i)\to(i,j)
(i,i)→(i,j),那么需要的最大传递步数实际上是序对
(
i
,
i
)
(i,i)
(i,i)的第二元第一次传递至i或之前传递过的重复元的最大次数(一旦这样那么必然开始重复的传递,不会再有新元素),所以最多
∣
A
∣
|\mathbf{A}|
∣A∣次。
一种 常用的二元关系的运算:(
R
1
,
R
2
\mathbf{R}_1, \mathbf{R}_2
R1,R2均是
A
\mathbf{A}
A上关系)
R
1
∘
R
2
=
{
(
x
,
y
)
∈
A
×
A
∣
∃
(
x
,
z
)
∈
R
1
and
(
z
,
y
)
∈
R
2
}
\mathbf{R}_1\circ \mathbf{R}_2 = \{(x, y)\in\mathbf{A}\times \mathbf{A} \vert \exists (x, z) \in \mathbf{R}_1 \textrm{ and } (z, y) \in \mathbf{R}_2\}
R1∘R2={(x,y)∈A×A∣∃(x,z)∈R1 and (z,y)∈R2}
更正:上面是不对的,简单的说,主要是
R
1
,
R
2
\mathbf{R}_1, \mathbf{R}_2
R1,R2写反了。
为了仔细的说明问题,下面先从最基础的地方开始分析:
关系是什么?关系是映射的更一般情况,可以一对多(函数是映射的特例,定义域和值域为数集)。关系的合成也不像映射的乘法对定义域、值域有相对应的要求。
首先,给定从集
A
\mathbf{A}
A到集
B
\mathbf{B}
B的关系
R
\mathbf{R}
R,和从集
B
\mathbf{B}
B到集
C
\mathbf{C}
C的关系
S
\mathbf{S}
S。
我们想要的
{
(
x
,
y
)
∣
(
x
,
z
)
∈
R
,
(
z
,
y
)
∈
S
}
\{(x, y) \vert (x, z) \in \mathbf{R} , (z, y) \in \mathbf{S}\}
{(x,y)∣(x,z)∈R,(z,y)∈S}实为从
A
\mathbf{A}
A到
C
\mathbf{C}
C的新关系,先运算的是
R
\mathbf{R}
R,再运算的是
S
\mathbf{S}
S。这时候先别急着写定义,回顾映射,
f
(
g
(
x
)
)
f( g(x) )
f(g(x))写作
f
∘
g
f \circ g
f∘g,是先运算
g
g
g 再运算
f
f
f。
因此,有这样的标准定义(
∧
\wedge
∧源码 \wedge):
S
∘
R
=
{
(
a
,
c
)
∈
A
×
C
∣
∃
b
∈
B
,
s
.
t
.
(
a
,
b
)
∈
R
∧
(
b
,
c
)
∈
S
}
\mathbf{S} \circ \mathbf{R} = \{(a, c)\in\mathbf{A}\times \mathbf{C}\ | \ \exists\ b \in \mathbf{B},\ \mathrm{s.t.} \ (a, b) \in \mathbf{R} \wedge ( b, c) \in \mathbf{S}\}
S∘R={(a,c)∈A×C ∣ ∃ b∈B, s.t. (a,b)∈R∧(b,c)∈S} 似乎上面看起来还是有些绕。那么,我们在上面的基础上,我们做一下推导:
仿照映射,给出如下定义:
∀
x
∈
A
,
\forall x\in \mathbf{A},
∀x∈A,
R
(
x
)
=
{
b
∈
B
∣
(
x
,
b
)
∈
R
}
.
\mathbf{R}(x) = \{ b\in \mathbf{B} | (x,b)\in \mathbf{R} \}.
R(x)={b∈B∣(x,b)∈R}.(这式是我自己定义的,用来说明一些问题。)那么,试说明:
(
S
∘
R
)
(
x
)
=
S
(
R
(
x
)
)
(\mathbf{S} \circ \mathbf{R})(x) = \mathbf{S} \left( \mathbf{R}(x) \right)
(S∘R)(x)=S(R(x))
首先,这个等式的意思是, A \mathbf{A} A中某元素 x x x在合成关系 ( S ∘ R ) (\mathbf{S} \circ \mathbf{R}) (S∘R)下的像的集合,等于“以 A \mathbf{A} A中元素 x x x在关系 R \mathbf{R} R下的像集中的所有元素” 再经过关系 S \mathbf{S} S得到的各元素像集的并集。
所以,根据前面的定义,可直接写出 ( S ∘ R ) ( x ) = { y ∈ C ∣ ( x , y ) ∈ S ∘ R } = { y ∈ C ∣ ∃ b ∈ B , s . t . ( x , b ) ∈ R ∧ ( b , y ) ∈ S } (\mathbf{S} \circ \mathbf{R})(x) = \{ y \in \mathbf{C}\ | \ (x,y)\in \mathbf{S} \circ \mathbf{R} \} = \{ y \in \mathbf{C}\ | \ \exists\ b \in \mathbf{B},\ \mathrm{s.t.} \ (x, b) \in \mathbf{R} \wedge ( b, y) \in \mathbf{S}\} (S∘R)(x)={y∈C ∣ (x,y)∈S∘R}={y∈C ∣ ∃ b∈B, s.t. (x,b)∈R∧(b,y)∈S} 又 S ( b ) = { y ∈ C ∣ ( b , y ) ∈ S } \mathbf{S}(b) = \{ y\in \mathbf{C}\ | \ (b,y)\in \mathbf{S} \} S(b)={y∈C ∣ (b,y)∈S},所以 S ( R ( x ) ) = { y ∈ C ∣ b ∈ R ( x ) , ( b , y ) ∈ S } = { y ∈ C ∣ ∃ b ∈ B , s . t . ( x , b ) ∈ R ∧ ( b , y ) ∈ S } . \mathbf{S} \left( \mathbf{R}(x) \right)=\{ y\in \mathbf{C}\ | \ b\in\mathbf{R}(x), \ (b,y)\in \mathbf{S} \}= \{ y \in \mathbf{C}\ | \ \exists\ b \in \mathbf{B},\ \mathrm{s.t.} \ (x, b) \in \mathbf{R} \wedge ( b, y) \in \mathbf{S}\}. S(R(x))={y∈C ∣ b∈R(x), (b,y)∈S}={y∈C ∣ ∃ b∈B, s.t. (x,b)∈R∧(b,y)∈S}.
上面证明
(
S
∘
R
)
(
x
)
=
S
(
R
(
x
)
)
(\mathbf{S} \circ \mathbf{R})(x) = \mathbf{S} \left( \mathbf{R}(x) \right)
(S∘R)(x)=S(R(x)),一方面是为了说明为什么S在前,另一面是想说明关系的合成运算和映射乘法一样,满足结合率,这样后面的
R
3
\mathbf{R}^3
R3等就不用纠结是
R
2
⋅
R
\mathbf{R}^2 · \mathbf{R}
R2⋅R还是
R
⋅
R
2
\mathbf{R}· \mathbf{R}^2
R⋅R2,它们是否相等。
关于结合律的说明:
(
(
S
∘
R
)
∘
Q
)
(
x
)
=
(
S
∘
R
)
(
Q
(
x
)
)
=
S
[
R
(
Q
(
x
)
)
]
(
S
∘
(
R
∘
Q
)
)
(
x
)
=
S
(
(
R
∘
Q
)
(
x
)
)
=
S
[
R
(
Q
(
x
)
)
]
⟹
(
S
∘
R
)
∘
Q
=
S
∘
(
R
∘
Q
)
\begin{aligned} ((\mathbf{S} \circ \mathbf{R} )\circ \mathbf{Q})(x) &= (\mathbf{S}\circ \mathbf{R}) \left( \mathbf{Q}(x) \right)=\mathbf{S} [\mathbf{R} ( \mathbf{Q}(x) )] \\ (\mathbf{S} \circ (\mathbf{R} \circ \mathbf{Q}))(x) &= \mathbf{S} (( \mathbf{R} \circ \mathbf{Q})(x) )=\mathbf{S} [\mathbf{R} ( \mathbf{Q}(x) )] \\ \implies (\mathbf{S} \circ \mathbf{R} )\circ \mathbf{Q} &= \mathbf{S} \circ (\mathbf{R} \circ \mathbf{Q})\end{aligned}
((S∘R)∘Q)(x)(S∘(R∘Q))(x)⟹(S∘R)∘Q=(S∘R)(Q(x))=S[R(Q(x))]=S((R∘Q)(x))=S[R(Q(x))]=S∘(R∘Q)
在有了前面的关系、各种性质、关系乘法的定义后,下面给出前面提到的七种性质成立的充要条件:
设
R
\mathbf{R}
R为
A
\mathbf{A}
A上的关系,则
1
R
\mathbf{R}
R在
A
\mathbf{A}
A上自反
⟺
I
A
⊆
R
\iff \mathbf{I}_A \sube \mathbf{R}
⟺IA⊆R;
2
R
\mathbf{R}
R在
A
\mathbf{A}
A上非自反
⟺
R
∩
I
A
=
∅
\iff \mathbf{R}\cap\mathbf{I}_A=\emptyset
⟺R∩IA=∅;
3
R
\mathbf{R}
R在
A
\mathbf{A}
A上对称
⟺
R
=
R
−
1
\iff \mathbf{R}=\mathbf{R}^{-1}
⟺R=R−1;
4
R
\mathbf{R}
R在
A
\mathbf{A}
A上(限制或弱)反对称
⟺
R
∩
R
−
1
⊆
I
A
\iff \mathbf{R}\cap\mathbf{R}^{-1} \sube \mathbf{I}_A
⟺R∩R−1⊆IA;
5
R
\mathbf{R}
R在
A
\mathbf{A}
A上反对称
⟺
R
∩
R
−
1
=
∅
\iff \mathbf{R}\cap\mathbf{R}^{-1}=\emptyset
⟺R∩R−1=∅;
6
R
\mathbf{R}
R在
A
\mathbf{A}
A上传递
⟺
R
∘
R
⊆
R
\iff \mathbf{R} \circ \mathbf{R} \sube \mathbf{R}
⟺R∘R⊆R;
7
R
\mathbf{R}
R在
A
\mathbf{A}
A上可比较
⟺
R
∪
R
−
1
∪
I
A
=
E
A
\iff \mathbf{R} \cup \mathbf{R}^{-1} \cup \mathbf{I}_A=\mathbf{E}_A
⟺R∪R−1∪IA=EA
⟺
E
A
∖
I
A
⊆
R
∪
R
−
1
\iff \mathbf{E}_A \setminus\mathbf{I}_A \sube\mathbf{R} \cup \mathbf{R}^{-1}
⟺EA∖IA⊆R∪R−1.
PS, 反和非区别是什么?为什么反对称有两种?我确定上述命名,并梳理清逻辑关联花了不少时间。
再有,这种用笛卡尔积对关系的表示,不是特别利于逻辑推演。
最后,用电子设备做笔记只会束缚你。我只维护了一下这里的关系,本文其他部分根本不愿去维护了。
正闭包: R + = ⋃ i = 1 ∞ R i = ⋃ i = 1 ∣ A ∣ R i \mathbf{R}^+ = \bigcup_{i = 1}^{\infty} \mathbf{R}^i = \bigcup_{i = 1}^{\vert \mathbf{A} \vert} \mathbf{R}^i R+=⋃i=1∞Ri=⋃i=1∣A∣Ri.
克林闭包(Kleene closure): R ∗ = R + ∪ R 0 \mathbf{R}^* =\mathbf{R}^+ \cup \mathbf{R}^0 R∗=R+∪R0.
这里的正闭包就是关系乘法(也叫合成, ∘ \circ ∘)的传递闭包,克林闭包就是传递闭包加上路径为0的关系。也即
- 对于关系合成这种运算,正闭包就是传递闭包,
- 但正闭包和Kleene闭包随着所定义的运算的不同而不同。
克林闭包:更一般的说,是使得原集合上定义的运算(如这里的关系乘法,又如后面字母表的笛卡尔乘积)满足运算在新集合中封闭的最小的那个新集合(即正闭包)的基础上,再加上单位元(即定义 ∘ \circ ∘运算的“零次方”)。
关于单位元——定义运算的“零次方”,比如运算为关系合成时,单位元为 R 0 \mathbf{R}^0 R0;又比如定义运算为字符串的笛卡尔乘积时,单位元为空串集,记为 { ε } \{\varepsilon\} {ε},注意,空串不是空集,因为空集与任意集合的笛卡尔积是空集,而这里要求空串集与任意集合的笛卡尔集仍为该集合,即单位元是这样一个集合,有一个长度为0的空串,但不是空集。
关于 克林闭包的幂集 2 R ∗ 2^{\mathbf{R}^*} 2R∗ 和 关系乘法 ∘ \circ ∘:
- 1 2 R ∗ 2^{\mathbf{R}^*} 2R∗ 是一个非空集合,更具体的说,该幂集是集族,每个元素是所有克林闭包的子集和空集(空集认为是“没有关系”这种关系),也即每个元素都是关系,在该幂集上定义的关系乘法满足:
- 2 满足封闭性:任意元素相”乘“后的新关系仍在集合内;
- 3 满足结合律: ( S ∘ R ) ∘ Q = S ∘ ( R ∘ Q ) (\mathbf{S} \circ \mathbf{R} )\circ \mathbf{Q} = \mathbf{S} \circ (\mathbf{R} \circ \mathbf{Q}) (S∘R)∘Q=S∘(R∘Q);
- 4 单位元: ∃ e = R 0 = { ( x , x ) ∣ x ∈ A } , s . t . ∀ R ∈ 2 R ∗ : e R = R e = R \exists\ e=\mathbf{R}^0 = \{(x, x) \vert x \in A\},\ \mathrm{s.t.}\ \forall \mathbf{R} \in 2^{\mathbf{R}^*}:e \mathbf{R}= \mathbf{R}e= \mathbf{R} ∃ e=R0={(x,x)∣x∈A}, s.t. ∀R∈2R∗:eR=Re=R;
- 5 不满足交换律,没有逆元。
所以
(
2
R
∗
,
∘
)
\left(2^{\mathbf{R}^*},\ \circ \ \right)
(2R∗, ∘ ),是 含幺半群(Monoid)。
PS: 逆关系
R
−
1
=
{
(
b
,
a
)
∣
(
a
,
b
)
∈
R
}
\mathbf{R}^{-1}=\{(b,a)\ |\ (a,b)\in\mathbf{R} \}
R−1={(b,a) ∣ (a,b)∈R}不是逆元,不满足
R
∘
R
−
1
=
R
−
1
∘
R
=
e
\mathbf{R} \circ \mathbf{R}^{-1} =\mathbf{R}^{-1} \circ \mathbf{R} =e
R∘R−1=R−1∘R=e.
练习:
-
A = { 1 , 2 , 5 , 8 , 9 } \mathbf{A} = \{1, 2, 5, 8, 9\} A={1,2,5,8,9}, A \mathbf{A} A上的 “模 2 同余” 关系及相应的划分为: R = { ( 1 , 1 ) , ( 2 , 2 ) , ( 5 , 5 ) , ( 8 , 8 ) , ( 9 , 9 ) , ( 2 , 8 ) , ( 8 , 2 ) , ( 1 , 5 ) , ( 5 , 1 ) , ( 1 , 9 ) , ( 9 , 1 ) , ( 5 , 9 ) , ( 9 , 5 ) } \mathbf{R}=\{(1,1),(2,2),(5,5), (8,8),(9,9),(2,8),(8,2),(1,5),(5,1),(1,9),(9,1),(5,9),(9,5)\} R={(1,1),(2,2),(5,5),(8,8),(9,9),(2,8),(8,2),(1,5),(5,1),(1,9),(9,1),(5,9),(9,5)} P = { { 1 , 5 , 9 } , { 2 , 8 } } \mathcal{P}=\{ \{1,5,9 \},\{2,8 \} \} P={{1,5,9},{2,8}}
-
A = { 1 , 2 , 5 , 8 , 9 } \mathbf{A} = \{1, 2, 5, 8, 9\} A={1,2,5,8,9},自己给定两个关系 R 1 \mathbf{R}_1 R1、 R 2 \mathbf{R}_2 R2,并计算 R 1 ∘ R 2 \mathbf{R}_1\circ \mathbf{R}_2 R1∘R2、 R 1 + \mathbf{R}^+_1 R1+、 R 1 ∗ \mathbf{R}^*_1 R1∗。
给定关系 R 1 = { ( 1 , 5 ) , ( 2 , 1 ) , ( 5 , 9 ) , ( 8 , 2 ) } \mathbf{R}_1=\{(1,5),(2,1),(5,9),(8,2) \} R1={(1,5),(2,1),(5,9),(8,2)}, R 2 = { ( 1 , 2 ) , ( 2 , 5 ) , ( 5 , 2 ) , ( 8 , 9 ) } \mathbf{R}_2 =\{(1,2),(2,5),(5,2),(8,9) \} R2={(1,2),(2,5),(5,2),(8,9)}
R 2 ∘ R 1 = { ( 1 , 2 ) , ( 2 , 2 ) , ( 8 , 5 ) } \mathbf{R}_2 \circ\mathbf{R}_1=\{(1,2),(2,2),(8,5) \} R2∘R1={(1,2),(2,2),(8,5)}
R 1 = { ( 1 , 5 ) , ( 2 , 1 ) , ( 5 , 9 ) , ( 8 , 2 ) } \mathbf{R}_1=\{(1,5),(2,1),(5,9),(8,2)\} R1={(1,5),(2,1),(5,9),(8,2)}, R 1 2 = { ( 2 , 5 ) , ( 1 , 9 ) , ( 8 , 1 ) } \mathbf{R}_1^2=\{(2,5),(1,9),(8,1)\} R12={(2,5),(1,9),(8,1)}
R 1 3 = { ( 8 , 5 ) , ( 2 , 9 ) } \mathbf{R}_1^3=\{(8,5),(2,9)\} R13={(8,5),(2,9)}, R 1 4 = { ( 8 , 9 ) } \mathbf{R}_1^4=\{(8,9)\} R14={(8,9)}, R 1 5 = ∅ \mathbf{R}_1^5=\emptyset R15=∅ R 1 + = ⋃ i = 1 ∣ A ∣ R i = { ( 1 , 5 ) , ( 1 , 9 ) , ( 2 , 1 ) , ( 2 , 5 ) , ( 2 , 9 ) , ( 5 , 9 ) , ( 8 , 1 ) , ( 8 , 2 ) , ( 8 , 5 ) , ( 8 , 9 ) } \mathbf{R}^+_1=\bigcup_{i = 1}^{\vert \mathbf{A} \vert} \mathbf{R}^i=\{(1,5),(1,9),(2,1),(2,5),(2,9),(5,9),(8,1),(8,2),(8,5),(8,9) \} R1+=i=1⋃∣A∣Ri={(1,5),(1,9),(2,1),(2,5),(2,9),(5,9),(8,1),(8,2),(8,5),(8,9)} R 1 ∗ = R 1 + ∪ { ( 1 , 1 ) , ( 2 , 2 ) , ( 5 , 5 ) , ( 8 , 8 ) , ( 9 , 9 ) } \mathbf{R}^*_1=\mathbf{R}^+_1\cup\{ (1,1),(2,2),(5,5),(8,8),(9,9)\} R1∗=R1+∪{(1,1),(2,2),(5,5),(8,8),(9,9)}
3 范数
3.1 R n \mathbb R^n Rn上的向量范数
给定向量
x
=
(
x
1
,
…
,
x
n
)
\bm{x} = (x_1,\dots,x_n)
x=(x1,…,xn). 其
l
p
l_p
lp 范数定义为
∣
∣
x
∣
∣
p
=
(
∑
i
n
∣
x
i
∣
p
)
1
p
,
||\bm{x}||_p = \left( \sum_{i}^n \vert x_{i}\vert^p\right)^{\frac{1}{p} },
∣∣x∣∣p=(i∑n∣xi∣p)p1,
p
=
1
,
2
p=1,2
p=1,2的
p
p
p范数的形式是显然的,但p可以是分数。特别的,
p
→
∞
p\to \infty
p→∞时,p-范数为
max
i
∣
x
i
∣
\max_{i} \vert x_{i} \vert
maxi∣xi∣,求极限即证。
特别强调,
p
≥
1
p \geq 1
p≥1,所以不推荐 0-范数、
−
∞
-\infty
−∞-范数的说法。理由:
1 上式在
p
→
0
p\to0
p→0时得不到非零元素个数。反例,给定向量
(
1
,
1
)
(1,1)
(1,1),它的“p-范数”在
p
→
0
p\to0
p→0时:
lim
p
→
0
+
(
1
p
+
1
p
)
1
p
=
lim
p
→
0
+
(
2
×
1
p
)
1
p
=
lim
p
→
0
+
2
1
p
=
+
∞
,
\lim\limits_{p\to0+} (1^p + 1^p)^{\frac{1}{p}}=\lim\limits_{p\to0+} (2\times 1^p)^{\frac{1}{p}}=\lim\limits_{p\to0+} 2^{\frac{1}{p}}=+\infty,
p→0+lim(1p+1p)p1=p→0+lim(2×1p)p1=p→0+lim2p1=+∞, 当
p
→
0
−
p\to0-
p→0−,p-范数趋于0。
2 查阅wiki(https://en.m.wikipedia.org/wiki/Norm_(mathematics),需要翻墙)关于此的说明:在信号处理和统计学中,David Donoho用引号表示零“范数”。按照Donoho的表示法,x的零“范数”就是x的非零坐标的个数,或者向量与零的汉明距离。但零“范数”不是真正的范数,因为它不是齐次的。一些工程师滥用术语,省略了Donoho的引号,不恰当地将非零数的函数称为数列空间 l 0 l^0 l0上的范数,来对应可测函数的勒贝格空间的符号。
3 当 p < 1 p<1 p<1后,不满足范数的性质。但通过查阅教材,但可以修改一些性质弱化条件,变成准范数(刚查到,原来是这样,害得我在p-范数那里纠结了半天)。所以在这里,当 0 < p < 1 0<p<1 0<p<1时, ∣ ∣ x ∣ ∣ p = ∑ i n ∣ x i ∣ p , ||\bm{x}||_p = \sum_{i}^n \vert x_{i}\vert^p, ∣∣x∣∣p=i∑n∣xi∣p,此时p-范数没有外层的 ( ⋅ ) 1 p (·)^{\frac{1}{p}} (⋅)p1,取极限就是非零元素的个数了。但不是真正意义上的范数!
3.2 连续函数空间 C [ a , b ] C[a,b] C[a,b]上的函数范数
C
[
a
,
b
]
C[a,b]
C[a,b]:所有定义在
[
a
,
b
]
[a,b]
[a,b]上的连续函数集合,按函数加法和数与函数乘法构成数域
R
\mathbb R
R上的线性空间。类似的,
C
p
[
a
,
b
]
C^p[a,b]
Cp[a,b]为具有
p
p
p阶连续导数的函数空间。连续函数在区间
[
a
,
b
]
[a,b]
[a,b]上的范数定义为:
∣
∣
f
∣
∣
p
=
(
∫
a
b
∣
f
(
x
)
∣
p
d
x
)
1
p
,
||f||_p = \left( \int_{a}^b \vert f(x)\vert^p \mathrm{d} x \right)^{\frac{1}{p} },
∣∣f∣∣p=(∫ab∣f(x)∣pdx)p1,特别的,
∣
∣
f
∣
∣
∞
=
max
a
≤
x
≤
b
∣
f
(
x
)
∣
||f||_\infty=\max_{a\le x\le b} |f(x)|
∣∣f∣∣∞=maxa≤x≤b∣f(x)∣. 证明只需要取对数后再继续求极限即可(可以先设
a
=
max
x
∣
f
(
x
)
∣
a=\max_{x} |f(x)|
a=maxx∣f(x)∣)。
3.3 R m × n \mathbb R^{m \times n} Rm×n上的矩阵范数
必须满足的性质:正定性,齐次性,三角不等式。一般来说,还应该包括:相容性 ∥ A B ∥ ≤ ∥ A ∥ ∥ B ∥ \|\mathbf A \mathbf B\| \le\|\mathbf A\|\|\mathbf B\| ∥AB∥≤∥A∥∥B∥。相容性常 通过向量范数诱导出的矩阵范数 来保证。
对矩阵
X
=
(
a
i
j
)
∈
C
m
×
n
\mathbf{X} =(a_{ij})\in\mathbb C^{m\times n}
X=(aij)∈Cm×n,其诱导/算子/从属范数主要包括:
∣
∣
X
∣
∣
∞
=
max
1
≤
i
≤
m
∑
1
n
∣
x
i
j
∣
||\mathbf{X}||_{\infty} =\max_{1\le i\le m} \sum_{1}^n |x_{ij} |
∣∣X∣∣∞=1≤i≤mmax1∑n∣xij∣
∣
∣
X
∣
∣
1
=
max
1
≤
j
≤
n
∑
1
m
∣
x
i
j
∣
||\mathbf{X}||_{1} = \max_{1\le j\le n} \sum_{1}^m |x_{ij} |
∣∣X∣∣1=1≤j≤nmax1∑m∣xij∣
∣
∣
X
∣
∣
2
=
σ
(
X
)
||\mathbf{X}||_{2}=\sigma(\mathbf X)
∣∣X∣∣2=σ(X)
说明:1 上面均是通过向量范数诱导得到的矩阵范数,必然满足相容性。其标准情况是基于
n
n
n阶方阵得到的,对于
m
,
n
m,n
m,n不同的情况,我还没有验证是否满足范数性质。
2 上面是
n
n
n阶方阵
X
\mathbf{X}
X在向量范数下诱导出的算子范数
∣
∣
X
∣
∣
v
=
sup
∣
∣
w
∣
∣
v
=
1
∣
∣
X
w
∣
∣
v
=
sup
w
≠
0
∥
X
w
∥
v
∥
w
∥
||\mathbf{X}||_v=\sup_{||\bm w||_v=1 } ||\mathbf{X}\bm w||_v = \sup_{\bm w \ne 0 } \frac{\|\mathbf{X}\bm w\|_v}{\|\bm w\|}
∣∣X∣∣v=∣∣w∣∣v=1sup∣∣Xw∣∣v=w=0sup∥w∥∥Xw∥v直接拓展到任意
m
,
n
m,n
m,n的情况(方阵时才能直接通过诱导证明相容性,任意mn尚待验证)。公式中将max改为了sup(supremum,上确界;对应的下确界是infimum),是因为万一是在向量趋于0向量时取极限得到的,那就取不到max,只会是sup。
3
σ
(
X
)
\sigma(\mathbf X)
σ(X)表示矩阵的最大奇异值,谱范数是最大奇异值,在方阵时,
∣
∣
X
∣
∣
2
=
X
H
X
||\mathbf{X}||_{2}=\sqrt{\mathbf X^\mathrm H \mathbf X}
∣∣X∣∣2=XHX,非方阵暂时不清楚。
4 矩阵的
∞
\infty
∞-范数也称为行(和)范数,
1
1
1-范数也称为列(和)范数,
2
2
2-范数也称为谱范数(spectral norm),这与矩阵的谱半径定义有关。
非从属范数:不是通过向量范数诱导出的矩阵范数
常用的非从属范数,包括向量范数中的p-范数(被称作矩阵的
m
p
m_p
mp范数),即将矩阵视为向量。
∣
∣
X
∣
∣
m
p
=
(
∑
i
,
j
∣
x
i
j
∣
p
)
1
p
.
||\mathbf{X}||_{m_p} = \left( \sum_{i, j} \vert x_{ij}\vert^p\right)^\frac{1}{p}.
∣∣X∣∣mp=(i,j∑∣xij∣p)p1.其中,
p
=
1
,
2
p=1,2
p=1,2的情况最常用,其他情况不一定是矩阵范数。
注意:1
p
=
1
、
2
、
∞
p=1、2、\infty
p=1、2、∞的情况不是矩阵的1、2、
∞
\infty
∞-范数。
p
=
2
p=2
p=2一般直接称Frobenius-范数(F-范数)。
2
p
=
1
、
2
p=1、2
p=1、2 时的
m
p
m_p
mp-范数(即绝对值之和、平方和)满足相容性 ,虽然 不是通过向量范数诱导出的。
PS:第2点满足相容性需证明,更一般的,是去证明
m
1
、
m
2
m_1、m_2
m1、m2是矩阵范数,即正定、齐次、三角不等式和相容性。证明就略去了,通过证明可以见到一个有用的不等式和提炼一种有趣的视角,有兴趣的可以自己证一下。
3 非从属范数是范数,即满足相容性;而
m
p
m_p
mp-范数不一定满足相容性,因此别搞混了,非从属范数是范数包括
m
1
、
m
2
m_1、m_2
m1、m2-范数,别因为它们是范数觉得任意p的
m
p
m_p
mp-范数都是范数。比如
p
=
∞
p=\infty
p=∞时的矩阵
m
p
m_p
mp范数就不满足相容性:两个矩阵均为元素全为3的3阶方阵,那么矩阵相乘后的新矩阵(元素全为27的3阶方阵)的
m
∞
m_\infty
m∞范数是27,而两个矩阵的
m
∞
m_\infty
m∞范数均是3,27>9。
4 累加、累成、积分
带条件的向量分量累加,如: ∑ x i > 0 x i 2 \sum_{x_i>0} x_i^2 xi>0∑xi2一般的Java代码:
public static int f(int[] temp) {
int sum = 0;
for (int i = 0; i < temp.length; i++) {
if (temp[i] > 0) {
sum += temp[i] * temp[i];
}
}
return sum;
}
推荐:
public static int f(int[] temp) {
int sum = 0;
for (int t : temp) {
sum += t > 0 ? Math.pow(t, 2) : 0;
} // of for a
return sum;
}// of f(int[])
PS: 1 for each循环用的是迭代器实现的,效率优于或至少等于一般for循环;
2 三目运算符好用;
3 幂运算
m
n
m^n
mn用Java中的 Math.pow(double m, double n):Returns the value of the first argument raised to the power of the second argument.
累乘代码中用product(即乘积)取代sum,LaTeX中用\prod取代\sum,初值为1,其余同理。 ∏ i = 1 10 a i \prod_{i = 1}^{10} a_i i=1∏10ai
二重定积分:
∫
0
10
∫
y
2
y
(
2
x
2
y
+
y
2
)
d
x
d
y
\int_{0}^{10}\int_{\frac{y}{2}}^{y} (2 x^2 y + y^2) \mathrm{d}x\mathrm{d}y
∫010∫2yy(2x2y+y2)dxdy
∫
0
10
∫
y
2
y
(
2
x
2
y
+
y
2
)
d
x
d
y
=
∫
0
10
2
y
d
y
∫
y
2
y
x
2
d
x
+
∫
0
10
y
2
d
y
∫
y
2
y
d
x
=
∫
0
10
7
12
y
4
d
y
+
∫
0
10
1
2
y
3
d
y
=
[
7
60
y
5
+
1
8
y
4
]
0
10
=
12
,
916
2
3
\int_{0}^{10}\int_{\frac{y}{2}}^{y} (2 x^2 y + y^2) \mathrm{d}x\mathrm{d}y =\int_{0}^{10}2y\mathrm{d}y\int_{\frac{y}{2}}^{y} x^2 \mathrm{d}x + \int_{0}^{10}y^2\mathrm{d}y\int_{\frac{y}{2}}^{y} \mathrm{d}x \\ =\int_{0}^{10}\frac{7}{12}y^4\mathrm{d}y+\int_{0}^{10}\frac{1}{2}y^3\mathrm{d}y =\left[\frac{7}{60}y^5+\frac{1}{8}y^4\right]_{0}^{10}=12,916\ \frac{2}{3}
∫010∫2yy(2x2y+y2)dxdy=∫0102ydy∫2yyx2dx+∫010y2dy∫2yydx=∫010127y4dy+∫01021y3dy=[607y5+81y4]010=12,916 32
上面是解析计算,上式在计算机中的计算是“数值”计算,这涉及到《数值分析》(数值计算方法)的内容。积分计算有更优的计算方法,我暂时还不想去实现那边的内容(以后肯定会,但可能不会贴代码,任性)。下面给个基于基础定义的代码:
public static double g() {
double integral = 0;
double deltaX = 0.001;
double deltaY = 0.001;
for (double y = 0; y < 10; y += deltaY) {
for (double x = y / 2; x < y; x += deltaX) {
integral += (2 * x * x * y + y * y) * deltaX * deltaY;
} // of for x
} // of for y
return integral;
}// of for g()
计算结果:(第二行是精确结果)
12919.513195605177
12916.666666666666
其他:
\le 表示 less than or equal,也可以写作 \leq,也用\leqslant
→
⩽
\to\ \leqslant
→ ⩽。
argmin 是argument minimal的缩写,\arg\min。用于获得使函数取最小值的参数,或取得向量、矩阵中最小元素的下标等。
5 向量及矩阵求导的推导
常用的向量矩阵求导公式。
后面推导了再补充。
笛卡尔坐标系中,点到直线的距离,点到面的距离的证明。这肯定是高中的知识,我记得以前很熟悉,后面补充。
机器学习的部分,会在刷了代码后,挨着边学、边证、边代码实现。
6 图、树与m叉树
元组
Baidu百科:元组(tuple)是关系数据库中的基本概念。笛卡尔积中每一个元素(d1,d2,…,dn),叫作一个n元组(n-tuple)或简称元组。当关系是一张表,二维表中的行表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表里,元组也称为 行、记录。
元组与列表的异同
元组与列表相同,也是容器对象,可以存储不同类型的内容。
元组与列表有两个不同点。第一个不同点是元组的声明的方式不同,具体因计算机语言而异;第二个不同点是元组声明和赋值后,不能像列表一样添加、删除和修改元素,也就是说元组在程序运行过程中不能被修改(注意,是元组中的元素不可修改),但可以用del删除删除整个元组。
用于列表的排序、替换、添加等方法也不适用于元组,适用于元组的主要运算有元组的合并、遍历、求元组的最大值和最小值等操作方法。
A directed graph is a tuple
G
=
(
V
,
E
)
G = (\mathbf{V}, \mathbf{E})
G=(V,E), where
V
\mathbf{V}
V is the set of nodes,
E
⊆
V
×
V
\mathbf{E} \subseteq \mathbf{V} \times \mathbf{V}
E⊆V×V is the set of arcs.
有向图的弧记为
⟨
v
i
,
v
j
⟩
\langle v_i, v_j \rangle
⟨vi,vj⟩,有角度的括号表示有向。
An undirected graph is a tuple
G
=
(
V
,
E
)
G = (\mathbf{V}, \mathbf{E})
G=(V,E), where
V
\mathbf{V}
V is the set of nodes,
E
⊆
V
×
V
\mathbf{E} \subseteq \mathbf{V} \times \mathbf{V}
E⊆V×V where
(
v
i
,
v
j
)
∈
E
⇔
(
v
j
,
v
i
)
∈
E
(v_i,v_j) \in \mathbf{E} \Leftrightarrow (v_j, v_i) \in \mathbf{E}
(vi,vj)∈E⇔(vj,vi)∈E is the set of edges.
无向图的边用小括号
(
v
i
,
v
j
)
(v_i, v_j)
(vi,vj)表示。
A 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, and 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 arc ⟨ v i , v j ⟩ \langle v_i, v_j \rangle ⟨vi,vj⟩.
有向图的边集合可以看作一个关系。特别的,这里用邻接矩阵来表示图,也即矩阵的坐标表示节点从i到j,矩阵的 a i j a_{ij} aij为1表示有关系 ( i , j ) (i,j) (i,j)。
对于邻接矩阵,进行二元关系的
∘
\circ
∘运算与矩阵乘法的异同:二元关系只记录了可否传递,矩阵乘法还表示了传递路径的数量。
具体来说:先从关系的角度来看,
a
i
j
a_{ij}
aij的角标其实表示了从i到j是否有关系(1有0无),那么二元关系的一次
∘
\circ
∘运算其实就是i到j经过一次额外传递后能否有(路径为2的)关系,新的i到j是之前的(i,k)与(k,j)运算得到的,注意是所有的k,也即之前的第i行和第j列,而这实质上就是矩阵运算了。
不同点,如果是关系,那么运算结果只有0或1,而矩阵运算可得到其他数字,这些数字实际上表示了满足i到j路径为运算次数的简单路径数。
E 0 \mathbf{E}^0 E0 ,自己到自己的关系,路径为0,邻接矩阵(adjacent matrix)表现为:单位矩阵。
E ∗ \mathbf{E}^* E∗ 里面还有0元素,不妨记 a i j = 0 a_{ij}=0 aij=0,说明 从 i i i到 j j j 无论怎么传递都无法连通,也即这个有向图是 非连通 的。但如果每个0元素的对称点不为0,或有向图的弧去掉方向形成的图是连通的,则非连通的有向图也可以是 弱连通 的。
练习:
上图的邻接矩阵:
E
=
[
0
1
0
1
1
0
1
1
0
1
0
1
1
1
1
0
]
\mathbf{E}=\begin{bmatrix} 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 \\ 1 & 1 & 1 & 0 \end{bmatrix}
E=
0101101101011110
无向网络的定义:
An undirected net is a tuple
G
=
(
V
,
w
)
G = (\mathbf{V}, w)
G=(V,w), where
V
\mathbf{V}
V is the set of nodes, and
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
j
,
v
i
)
w(v_i,v_j)=w(v_j,v_i)
w(vi,vj)=w(vj,vi) is the weight of the arc
⟨
v
i
,
v
j
⟩
\langle v_i, v_j \rangle
⟨vi,vj⟩ and
⟨
v
j
,
v
i
⟩
\langle v_j, v_i \rangle
⟨vj,vi⟩.
进一步修改如下:
An undirected net is a tuple
G
=
(
V
,
w
)
G = (\mathbf{V}, w)
G=(V,w), where
V
\mathbf{V}
V is the set of nodes, and
w
:
V
×
V
→
R
w: \mathbf{V} \times \mathbf{V} \to \mathbb{R}
w:V×V→R is the weight function where,
∀
v
i
,
v
j
∈
V
\forall v_i,v_j\in \mathbf{V}
∀vi,vj∈V,
w
(
v
i
,
v
j
)
w(v_i,v_j)
w(vi,vj) is the weight of the arc
⟨
v
i
,
v
j
⟩
\langle v_i, v_j \rangle
⟨vi,vj⟩ and
w
(
v
i
,
v
j
)
=
w
(
v
j
,
v
i
)
w(v_i,v_j)=w(v_j,v_i)
w(vi,vj)=w(vj,vi).
树
树和m叉树是不同的,树的儿子间是无序的,而m叉树同一节点的儿子有左中右等之分。
二元组 tuple,三元组 triple,四元组 quadruple, n n n元组 n n n-tuple
树的 一种 非常漂亮(清晰,简洁,完备的数学语言,provided by minfanphd)的定义:
Let ϕ \phi ϕ be the empty node, a tree is a triple T = ( V , r , p ) T=(\mathbf V, r ,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;
-
p
:
V
∪
{
ϕ
}
→
V
∪
{
ϕ
}
p: \mathbf V \cup \{ \phi\} \to \mathbf V \cup \{ \phi\}
p:V∪{ϕ}→V∪{ϕ} is the parent mapping satisfying
- p ( r ) = ϕ p(r) = \phi p(r)=ϕ;
- ∀ v ∈ V , ∃ ! n ≥ 0 , s . t . p n ( v ) = r \forall v\in\mathbf V, \exist! \ n\ge0, \mathrm{s.t.} \ p^{n}(v)=r ∀v∈V,∃! n≥0,s.t. pn(v)=r.
PS: 1 这里有点抽象代数里的轮换的意思……
2 注意
ϕ
\phi
ϕ没有放进三元组中,原因是该三元组是用来确定一棵具体的树,而
ϕ
\phi
ϕ适用于所有的树。
3
p
(
0
)
(
v
)
=
v
p^{(0)}(v)=v
p(0)(v)=v,表示0阶父节点就是自己;
p
(
1
)
(
v
)
p^{(1)}(v)
p(1)(v)就是映射到
v
v
v的唯一父节点;
p
(
2
)
(
v
)
=
p
(
p
(
v
)
)
p^{(2)}(v)=p(p(v))
p(2)(v)=p(p(v)),表示映射到
v
v
v的2阶父节点(前提:1阶父节点存在且不为
ϕ
\phi
ϕ)。
4 根据定义,
p
(
ϕ
)
p(\phi)
p(ϕ)是没有意义的,
ϕ
\phi
ϕ是不在定义域中的。
5
n
n
n可以看作所在的层,
n
=
0
n=0
n=0时只有根节点。
6
n
n
n的存在且唯一,即表示了可达,又暗含了没有环。
个人理解的Java 代码,待完善
public class Tree {
public static class TreeNode{
Object data;
TreeNode parent;
public TreeNode(Object paraData) {
this(data,null);
}// of the first constructor
public TreeNode(Object paraData, TreeNode paraNode) {
data = paraData;
parent = paraNode;
}// of the second constructor
}// of class TreeNode
Node root;
public Tree(){
root = new TreeNode("V_0");
}// of the first constructor
// 关于p函数:建议使用专门的散列 HashMap,待补充
// 该HashMap 包含了节点和p函数。
// 需指出的是,尽管HashMap非常准确而直接的表示了p函数,但是或许有些浪费
// 或许都可以不用刻意表示p函数(因为p函数实际上就是节点到其父节点的链的集合,或可用其他方式给出了链)
// 构造一棵树, 给出根节点,生成子节点,并将更新表示节点关系的HashMap,然后根据HashMap重置树的链
public Tree(HashMap p) {
// To Do!
}// Of the constructor
}//Of class Tree
PS: 1 原文的代码中用的不是Hash表,而是数组,一方面原文代码只是用来示意,另一方面原文的意思是可以任意编号,只要满足链的关系实质相同即可。也就是说,虽然数组给了一个顺序,但是这个编码只是用来指代相应的节点,不要求各编号满足先序、后序之类的,完全可以任意编号。
2 上面用HashMap来实现树,其实有点作弊,因为树是基础数据结构,这里用到了另一种不太底层的数据结构(最底层数据结构:数组、栈,其次:表、队列),虽然也可以,但是总觉得实现得不够底层。而且HashMap我还没学,没自己实现,待完善……
m叉树
预备知识:字符串
在《形式理论》中,设
Σ
\Sigma
Σ 是叫做字母表(alphabet)的非空有限集合。
Σ
\Sigma
Σ 的元素叫做“符号”或“字符”。如
英文字母表
Σ
=
{
a
,
b
,
…
,
z
}
\Sigma = \{ \rm a,b, \dots, z \}
Σ={a,b,…,z},这里正体表示它们为常量;
阿拉伯数字字母表
Σ
=
{
0
,
1
,
…
,
9
}
\Sigma = \{ \rm 0, 1, \dots, 9 \}
Σ={0,1,…,9};
二进制数字字母表的乘积:
{
0
,
1
}
×
{
0
,
1
}
=
{
(
0
,
0
)
,
(
0
,
1
)
,
(
1
,
0
)
,
(
1
,
1
)
}
:
=
{
00
,
01
,
10
,
11
}
\{ 0,1 \} \times \{ 0,1 \}=\{ (0,0),(0,1),(1,0),(1,1) \}:=\{00,01,10,11\}
{0,1}×{0,1}={(0,0),(0,1),(1,0),(1,1)}:={00,01,10,11}注意,这里的乘法与关系乘法是不同的,这里的乘法就是笛卡尔积,因此集合在该乘法运算下的正闭包(具有的性质是字符串长度大于等于当前字母表),不同于关系乘法的正闭包(具有的性质是传递性)。
比如,二进制数字字母表的正闭包,表示长度至少为1的字符串(0,1串;串0和00的长度分别为1、2)
Σ
+
=
{
0
,
1
}
+
=
{
0
,
1
,
00
,
01
,
10
,
11
,
000
,
001
,
010
,
011
,
100
,
101
,
110
,
111
,
0000
,
…
}
\Sigma^+ = \{ 0, 1 \}^+=\{ 0,1,00,01,10,11, 000, 001, 010, 011, 100, 101, 110,111, 0000,\dots \}
Σ+={0,1}+={0,1,00,01,10,11,000,001,010,011,100,101,110,111,0000,…}
二进制数字字母表的Kleene闭包,在正闭包的基础上,加上单位元(即定义运算的零次方,这里是空串),
Σ
∗
=
{
ε
}
∪
{
0
,
1
}
+
\Sigma^* =\{\varepsilon\}\cup \{ 0, 1 \}^+
Σ∗={ε}∪{0,1}+.
m叉树的定义:
Let ϕ \phi ϕ be the empty node, an m m m-tree is a quadruple T m = ( V , r , Σ , d ) T_m= (\mathbf V,r,\Sigma,d) Tm=(V,r,Σ,d) where
- V \mathbf V V is the set of nodes;
- r ∈ V r\in \mathbf V r∈V is the root node;
- Σ \Sigma Σ is the alphabet { 1 , 2 , … , m } \{ 1,2,\dots,m\} {1,2,…,m};
-
d
:
(
V
∪
{
ϕ
}
)
×
Σ
∗
→
V
∪
{
ϕ
}
d:(\mathbf V \cup \{ \phi \})\times \Sigma^*\to \mathbf V \cup \{ \phi \}
d:(V∪{ϕ})×Σ∗→V∪{ϕ} is the descendant mapping satisfying
- ∀ v ∈ V , ∃ ! s ∈ Σ ∗ , s . t . d ( r , s ) = v \forall v\in \mathbf V, \exists!\ s\in \Sigma^*, \mathrm{s.t.}\ d(r,s)=v ∀v∈V,∃! s∈Σ∗,s.t. d(r,s)=v;
- ∀ s 1 , s 2 ∈ Σ ∗ , d ( r , s 1 s 2 ) = d ( d ( r , s 1 ) , s 2 ) \forall s_1,s_2\in\Sigma^* , d(r,s_1s_2)=d(d(r,s_1),s_2) ∀s1,s2∈Σ∗,d(r,s1s2)=d(d(r,s1),s2).
注意,上面第二点是保证有效利用字母表构建树的条件,如果没有第二点的要求,那么只规定了根到各节点有唯一字符串,各节点间的关系是推不出的。如下图中,完全可以把正常m叉树的字符串直接套给右图用。
推论:
1
∀
s
∈
Σ
∗
,
d
(
ϕ
,
s
)
=
ϕ
\forall s \in \Sigma^*,d(\phi,s)=\phi
∀s∈Σ∗,d(ϕ,s)=ϕ.
证 a.
V
\mathbf V
V中必然有节点
v
v
v满足
∀
s
∈
Σ
∗
,
d
(
v
,
s
)
=
ϕ
\forall s \in \Sigma^*, d(v,s)=\phi
∀s∈Σ∗,d(v,s)=ϕ,否则一直映射下去必然出现循环,即不止一个字符串满足
d
(
r
,
s
)
=
v
d(r,s)=v
d(r,s)=v,矛盾。
b. 假设
∃
s
∈
Σ
∗
,
s
.
t
.
d
(
ϕ
,
s
)
=
u
∧
u
≠
ϕ
\exists s \in \Sigma^*,\mathrm{s.t.} \ d(\phi,s)=u\wedge u\ne\phi
∃s∈Σ∗,s.t. d(ϕ,s)=u∧u=ϕ,那么由a可知,
u
u
u或
u
u
u以后必然有节点映射至
ϕ
\phi
ϕ,所以
u
u
u必然出现循环,矛盾。
上面说明空节点读入任何串,都转移到自己。我们将满足
∀
s
∈
Σ
,
d
(
v
,
s
)
=
ϕ
\forall s \in \Sigma, d(v,s)=\phi
∀s∈Σ,d(v,s)=ϕ的节点
v
v
v称为叶节点。则叶节点读入任何串,都转移到空节点。
从有限状态自动机的角度,
d
d
d被称为状态转移函数,即从一个状态读入一个字符,转移下一个状态。
2
∀
v
∈
V
∪
{
ϕ
}
a
n
d
∀
s
1
,
s
2
∈
Σ
∗
,
d
(
v
,
s
1
s
2
)
=
d
(
d
(
v
,
s
1
)
,
s
2
)
\forall v \in \mathbf V\cup\{\phi\}\ \mathrm{and}\ \forall s_1,s_2 \in \Sigma^*,d(v,s_1s_2)=d(d(v,s_1),s_2)
∀v∈V∪{ϕ} and ∀s1,s2∈Σ∗,d(v,s1s2)=d(d(v,s1),s2)
证:
d
(
d
(
r
,
s
0
)
,
s
1
s
2
)
=
d
(
r
,
s
0
s
1
s
2
)
=
d
(
d
(
r
,
s
0
s
1
)
,
s
2
)
=
d
(
d
(
d
(
r
,
s
0
)
,
s
1
)
,
s
2
)
d(d(r,s_0),s_1s_2)=d(r,s_0s_1s_2)=d(d(r,s_0s_1),s_2)=d(d(d(r,s_0),s_1),s_2)
d(d(r,s0),s1s2)=d(r,s0s1s2)=d(d(r,s0s1),s2)=d(d(d(r,s0),s1),s2),记
d
(
r
,
s
0
)
=
v
d(r,s_0)=v
d(r,s0)=v即可。
3
∀
v
∈
V
∪
{
ϕ
}
,
d
(
v
,
ε
)
=
v
\forall v \in \mathbf V\cup\{\phi\},d(v,\varepsilon)=v
∀v∈V∪{ϕ},d(v,ε)=v
证:
v
=
d
(
r
,
s
)
=
d
(
r
,
s
ε
)
=
d
(
d
(
r
,
s
)
,
ε
)
=
d
(
v
,
ε
)
v=d(r,s) = d(r,s\varepsilon) =d(d(r,s),\varepsilon)=d(v,\varepsilon)
v=d(r,s)=d(r,sε)=d(d(r,s),ε)=d(v,ε).(反证亦可)
PS: 1 长度为
n
n
n的
m
m
m进制串的个数:
m
n
m^n
mn。说明:一个长度为10的3进制串,如:0 021 102 010,每个位置有3种可能,10个位置,可以表达
3
10
3^{10}
310个数。
2
m
m
m-叉树的字母表满足:
∣
Σ
∣
=
m
|\Sigma| = m
∣Σ∣=m.
3
m
m
m-叉树引入字母表并用decendant的方式来定义,而不同于树用parent的方式来定义,是因为:
树的儿子之间无序,可以随便交换;而m叉树的儿子间是有序的,m叉树用parent的方式不能清楚自己是第几个儿子,即信息无法准确表达。
4 我们用一个decendant矩阵来表示节点和后代的关系,
n
n
n个结点的
m
m
m-叉树的矩阵维度是
n
×
m
n\times m
n×m,decendant矩阵的第
i
i
i行表示第
i
i
i个节点的后代节点的编号:根节点排序从
0
→
n
−
1
0\to n-1
0→n−1,-1为空,且认为规定从左往右排,比如三叉树某节点有2个儿子,则这两个儿子是左中儿子,右儿子为空。
上图中7个节点的3-叉树,,所以上图的decendant矩阵为:
[
1
2
3
−
1
4
−
1
−
1
−
1
−
1
5
−
1
6
−
1
−
1
−
1
−
1
−
1
−
1
−
1
−
1
−
1
]
\begin{bmatrix} 1 & 2 & 3\\ -1 & 4 & -1 \\ -1 & -1 & -1\\ 5 & -1 & 6 \\ -1 & -1 & -1\\ -1 & -1 & -1\\ -1 & -1 & -1\\ \end{bmatrix}
1−1−15−1−1−124−1−1−1−1−13−1−16−1−1−1
注意,上面V1的节点是(-1,4,-1),而不是(4,-1,-1),虽然都是只有1个节点,但是第二种表达其实暗含了自己去解释位置的意思,这就错了。显然,树叶节点那一行全为-1,因此至少我们可以减少一行(极端情况也至少有一个树叶),但这里每个节点都写出来是因为这里的排序可以是任意的,别看上面例子用的是层序,你来个随机排序都无所谓,这样的矩阵更本质,而缩减树叶行意味着我们给节点命名时有额外的条件;但也该注意到,这样的存储是比较浪费空间的(又比如某行出现-1后,后面全为-1),这里只是原理说明。
Java 代码
public class MTree {
int n; //节点数. 表示节点 v_0 至 v_{n-1}.
int root; // 根节点. 0 至 n-1.
int m; // 字母表大小. 字母表为 {1, 2, ..., m}
int[][] child; // 子节点. child[i][j] 表示在节点 i 读入字母 j 后转移到的状态.
// 初始化一棵 m-树, 但现在它还无法表示一棵真正的 m-树.
public MTree(int paraN, int paraM) {
n = paraN;
child = new int[n][m];
}// Of the constructor
// 从当前节点读入一系列字符 (其实是整数), 转到相应的节点.
public int getChild(int paraNode, int[] paraString) {
int resultNode = paraNode;
for (int i = 0; i < paraString.length; i++) {
resultNode = child[resultNode][paraString[i]];
if (resultNode == -1) {
break;
}//Of if
}//Of for i
return resultNode;
}// Of getChild
}//Of class MTree
根据
m
m
m-叉树,回头重新定义 树:
Let
ϕ
\phi
ϕ be the empty node, a tree is a quadruple
T
=
(
V
,
r
,
Σ
,
a
)
T= (\mathbf V,r,\Sigma,a)
T=(V,r,Σ,a) where
- V \mathbf V V is the set of nodes;
- r ∈ V r\in \mathbf V r∈V is the root node;
- Σ \Sigma Σ is the alphabet { 1 } \{1\} {1};
-
a
:
(
V
∪
{
ϕ
}
)
×
Σ
∗
→
V
∪
{
ϕ
}
a:(\mathbf V \cup \{ \phi \})\times \Sigma^*\to \mathbf V \cup \{ \phi \}
a:(V∪{ϕ})×Σ∗→V∪{ϕ} is the ancestor mapping satisfying
- ∀ v ∈ V , ∃ ! s ∈ Σ ∗ , s . t . a ( v , s ) = r \forall v\in \mathbf V, \exists!\ s\in \Sigma^*, \mathrm{s.t.}\ a(v,s)=r ∀v∈V,∃! s∈Σ∗,s.t. a(v,s)=r;
- ∀ s 1 , s 2 ∈ Σ ∗ , a ( r , s 1 s 2 ) = a ( a ( r , s 1 ) , s 2 ) \forall s_1,s_2\in\Sigma^* , a(r,s_1s_2)=a(a(r,s_1),s_2) ∀s1,s2∈Σ∗,a(r,s1s2)=a(a(r,s1),s2).
推论1:
a
(
r
,
ε
)
=
r
a(r,\varepsilon)=r
a(r,ε)=r.
证: 设
a
(
r
,
s
)
=
r
a(r,s)=r
a(r,s)=r,又
a
(
r
,
s
)
=
a
(
r
,
s
ε
)
=
a
(
a
(
r
,
s
)
,
ε
)
=
a
(
r
,
ε
)
a(r,s)=a(r,s\varepsilon)=a(a(r,s),\varepsilon)=a(r,\varepsilon)
a(r,s)=a(r,sε)=a(a(r,s),ε)=a(r,ε),由
a
a
a的性质1可知
s
s
s唯一,则
s
s
s为空串
ε
\varepsilon
ε。
推论2:
a
(
ϕ
,
s
)
=
ϕ
a(\phi,s)=\phi
a(ϕ,s)=ϕ.
说明:一定有节点映射到
ϕ
\phi
ϕ,否则出现循环,与
s
s
s的唯一性矛盾;假设
a
(
ϕ
,
s
)
≠
ϕ
a(\phi,s)\ne\phi
a(ϕ,s)=ϕ,则依然出现循环。
推论3: ∀ s ≠ ε , a ( r , s ) = ϕ \forall s\ne\varepsilon,a(r,s)=\phi ∀s=ε,a(r,s)=ϕ.
7 max min 程序
max min 泛指下面4种情况:
max
i
min
j
f
,
max
j
min
i
f
,
min
i
max
j
f
,
min
j
max
i
f
\max_i\min_jf,\ \ \ \ \max_j\min_if,\ \ \ \ \min_i\max_jf,\ \ \ \ \min_j\max_if
imaxjminf, jmaximinf, iminjmaxf, jminimaxf容易验证
max
i
min
j
f
\max_i\min_jf
maximinjf和
min
j
max
i
f
\min_j\max_if
minjmaxif是不同的,进而上面4种都是不同的情况。
程序的实现是简单的,但是有一个困难的点,如果
f
f
f是变化的呢,比如这次1-范数,下次2-范数,再下次我自己弄个范数试试,怎么传递这个函数呢?
这里运用学到的一种技术来实现,叫函数对象。简单的说,我整个类,它只有一个函数,我把这个类作为参数放进去传递。具体实现时要用到接口(因为方法要改,传递的参数是接口类型,具体实现类改变方法)。
先给接口:
public interface NormFunction {
double normFunction(double[] firstVector, double[] secondVector);
}
再给上面4种的一个实现(其余的很容易改出来,代码精华在21行:
double fValue = function.normFunction(vector1,vector2);):
public class MaxMin {
public double max_iMin_j(double[][] matrix1, double[][] matrix2, NormFunction function) {
if(matrix1.length != matrix2.length) {return -1;}
double[] vector1 = new double[matrix1.length];
double[] vector2 = new double[matrix2.length];
double maxMin = 0;
for (int i = 0; i < matrix1[0].length; i++) {
// initialize vector1
for (int k = 0; k < matrix1.length; k++) {vector1[k] = matrix1[k][i];}
double min = Double.MAX_VALUE;
for (int j = 0; j < matrix2[0].length; j++) {
// initialize vector2
for (int k = 0; k < matrix2.length; k++) {vector2[k] = matrix2[k][j];}
// calculate the norm function
double fValue = function.normFunction(vector1,vector2);
// get the minimal value for each vector in matrix1
min = min > fValue ? fValue : min;
} // of for j
// get the maximal value for all the minimums.
maxMin = min > maxMin ? min : maxMin;
} // of for i
return maxMin;
}// of max_iMin_j(double[][], double[][], NormFunction)
public static class TwoNorm implements NormFunction {
public double normFunction(double[] v1, double[] v2) {
double fValue = 0;
for (int k = 0; k < v1.length; k++) {fValue += Math.pow(v1[k] - v2[k],2);}
// fValue = Math.sqrt(fValue); // Commenting this statement just for the convenience to check.
return fValue;
}// of normFunction(double[], double[])
}// of class TwoNorm
public static void main(String[] args) {
double[][] A = { { 5, 3, 2 }, { 4, 1, 6 } };
double[][] B = { { 3, 6, 1 }, { 2, 5, 4 } };
MaxMin a = new MaxMin();
System.out.println(a.max_iMin_j(A,B,new TwoNorm()));
}// of main
}// of class MaxMin
结果:
5.0