数学表达式の学习笔记

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=UX.

  \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 BA B ∈ 2 A \mathbf B \in 2^{\mathbf{A}} B2A 等价。

  \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:RR,      xx2+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}={xN  5x9}

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} (0ii0)[0110]{1001} 0110  acbd i00i

2 二元关系

  (一个从集合 A \mathbf{A} A到集合 B \mathbf{B} B的)二元关系的本质是一种集合,它是 A × B \mathbf{A}\times \mathbf{B} A×B 的子集。因此 a 、 b a、b ab满足某种关系,实质为元素 ( a , b ) (a,b) (a,b)属于这个关系的集合,即 ( a , b ) ∈ R (a,b)\in\mathbf{R} (a,b)R。举例:

  1. 包含关系
    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})}
  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 的子集。

  1. 等价关系 equivalence relation ∼ \sim
    满足:
    i 自反性reflexivity: ∀ a ∈ A \forall a\in \mathbf{A} aA,有 ( a , a ) ∈ R (a,a) \in \mathbf{R} (a,a)R
    ii 对称性 ∀ a , b ∈ A \forall a,b \in \mathbf{A} a,bA,如果 ( 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,cA, 如果 ( 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.

  2. 偏序关系 partial order relation ⪯ \preceq
    满足:
    i 自反性
    ii 反对称性 anti-symmetry: ∀ a , b ∈ A \forall a,b \in \mathbf{A} a,bA,若 ( 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 传递性

  3. 全序关系 total ordering relation <
    i 可比较性 ∀ a , b ∈ A \forall a,b \in \mathbf{A} a,bA,如果 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} aA,有 ( a , a ) ∉ R (a,a) \notin \mathbf{R} (a,a)/R.
    iii 传递性.


  1. n n n同余关系
    n n n是给定的一个大于1的整数。设 A ∈ Z \mathbf {A} \in \mathbb{Z} AZ,首先表示 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  ab(mod n)}上式中 a ≡ b ( m o d   n ) a\equiv b({\rm mod} \ n) ab(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 ab n n n可以整除 a − a = 0 a-a=0 aa=0,即 a ≡ a ( m o d   n ) a\equiv a({\rm mod} \ n) aa(mod n),满足自反性。
    对称性: ∀ a , b ∈ A \forall a,b \in \mathbf{A} a,bA,如果 a ≡ b ( m o d   n ) a\equiv b({\rm mod} \ n) ab(mod n),则 a − b = k ⋅ n a-b=k·n ab=kn,则 b − a = − k ⋅ n b-a=-k·n ba=kn,即 b ≡ a ( m o d   n ) b\equiv a({\rm mod} \ n) ba(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} aA,集合 { x ∈ A   ∣   ( x , a ) ∈ R } \{ x\in\mathbf{A} \ | \ (x,a)\in\mathbf{R} \} {xA  (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)xA}={(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,yA}=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)xA}

  · 逆关系 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) \} R1={(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)=RIA={(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)=RR1={(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=1Ri={(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\} R1R2={(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 fg,是先运算 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}\} SR={(a,c)A×C   bB, s.t. (a,b)R(b,c)S}  似乎上面看起来还是有些绕。那么,我们在上面的基础上,我们做一下推导:
  仿照映射,给出如下定义: ∀ x ∈ A , \forall x\in \mathbf{A}, xA, R ( x ) = { b ∈ B ∣ ( x , b ) ∈ R } . \mathbf{R}(x) = \{ b\in \mathbf{B} | (x,b)\in \mathbf{R} \}. R(x)={bB(x,b)R}.(这式是我自己定义的,用来说明一些问题。)那么,试说明: ( S ∘ R ) ( x ) = S ( R ( x ) ) (\mathbf{S} \circ \mathbf{R})(x) = \mathbf{S} \left( \mathbf{R}(x) \right) (SR)(x)=S(R(x))

  首先,这个等式的意思是, A \mathbf{A} A中某元素 x x x在合成关系 ( S ∘ R ) (\mathbf{S} \circ \mathbf{R}) (SR)下的像的集合,等于“以 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}\} (SR)(x)={yC  (x,y)SR}={yC   bB, 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)={yC  (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))={yC  bR(x), (b,y)S}={yC   bB, 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) (SR)(x)=S(R(x)),一方面是为了说明为什么S在前,另一面是想说明关系的合成运算和映射乘法一样,满足结合率,这样后面的 R 3 \mathbf{R}^3 R3等就不用纠结是 R 2 ⋅ R \mathbf{R}^2 · \mathbf{R} R2R还是 R ⋅ R 2 \mathbf{R}· \mathbf{R}^2 RR2,它们是否相等。
  关于结合律的说明:
( ( 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} ((SR)Q)(x)(S(RQ))(x)(SR)Q=(SR)(Q(x))=S[R(Q(x))]=S((RQ)(x))=S[R(Q(x))]=S(RQ)


  在有了前面的关系、各种性质、关系乘法的定义后,下面给出前面提到的七种性质成立的充要条件:
  设 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} IAR
2 R \mathbf{R} R A \mathbf{A} A上非自反    ⟺    R ∩ I A = ∅ \iff \mathbf{R}\cap\mathbf{I}_A=\emptyset RIA=
3 R \mathbf{R} R A \mathbf{A} A上对称     ⟺    R = R − 1 \iff \mathbf{R}=\mathbf{R}^{-1} R=R1
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 RR1IA
5 R \mathbf{R} R A \mathbf{A} A上反对称    ⟺    R ∩ R − 1 = ∅ \iff \mathbf{R}\cap\mathbf{R}^{-1}=\emptyset RR1=
6 R \mathbf{R} R A \mathbf{A} A上传递     ⟺    R ∘ R ⊆ R \iff \mathbf{R} \circ \mathbf{R} \sube \mathbf{R} RRR
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 RR1IA=EA    ⟺    E A ∖ I A ⊆ R ∪ R − 1 \iff \mathbf{E}_A \setminus\mathbf{I}_A \sube\mathbf{R} \cup \mathbf{R}^{-1} EAIARR1.

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=1Ri=i=1ARi.

  克林闭包(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}) (SR)Q=S(RQ)
  • 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)xA}, s.t. R2R: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} \} R1={(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 RR1=R1R=e.

练习:

  1. 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}}

  2. 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 R1R2 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) \} R2R1={(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=1ARi={(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} }, ∣∣xp=(inxip)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 maxixi,求极限即证。

  特别强调 p ≥ 1 p \geq 1 p1,所以不推荐 0-范数、 − ∞ -\infty -范数的说法。理由:
  1 上式在 p → 0 p\to0 p0时得不到非零元素个数。反例,给定向量 ( 1 , 1 ) (1,1) (1,1),它的“p-范数”在 p → 0 p\to0 p0时:
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, p0+lim(1p+1p)p1=p0+lim(2×1p)p1=p0+lim2p1=+, p → 0 − p\to0- p0,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, ∣∣xp=inxip,此时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} }, ∣∣fp=(abf(x)pdx)p1,特别的, ∣ ∣ f ∣ ∣ ∞ = max ⁡ a ≤ x ≤ b ∣ f ( x ) ∣ ||f||_\infty=\max_{a\le x\le b} |f(x)| ∣∣f=maxaxbf(x). 证明只需要取对数后再继续求极限即可(可以先设 a = max ⁡ x ∣ f ( x ) ∣ a=\max_{x} |f(x)| a=maxxf(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\| ABA∥∥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=1immax1nxij ∣ ∣ 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} | ∣∣X1=1jnmax1mxij ∣ ∣ X ∣ ∣ 2 = σ ( X ) ||\mathbf{X}||_{2}=\sigma(\mathbf X) ∣∣X2=σ(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\|} ∣∣Xv=∣∣wv=1sup∣∣Xwv=w=0supwXwv直接拓展到任意 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} ∣∣X2=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}. ∣∣Xmp=(i,jxijp)p1.其中, p = 1 , 2 p=1,2 p=1,2的情况最常用,其他情况不一定是矩阵范数。

注意:1 p = 1 、 2 、 ∞ p=1、2、\infty p=12的情况不是矩阵的1、2、 ∞ \infty -范数。 p = 2 p=2 p=2一般直接称Frobenius-范数(F-范数)。
   2 p = 1 、 2 p=1、2 p=12 时的 m p m_p mp-范数(即绝对值之和、平方和)满足相容性 ,虽然 不是通过向量范数诱导出的
 PS:第2点满足相容性需证明,更一般的,是去证明 m 1 、 m 2 m_1、m_2 m1m2是矩阵范数,即正定、齐次、三角不等式和相容性。证明就略去了,通过证明可以见到一个有用的不等式和提炼一种有趣的视角,有兴趣的可以自己证一下。
   3 非从属范数是范数,即满足相容性;而 m p m_p mp-范数不一定满足相容性,因此别搞混了,非从属范数是范数包括 m 1 、 m 2 m_1、m_2 m1m2-范数,别因为它们是范数觉得任意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>0xi2一般的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=110ai

  二重定积分: ∫ 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 0102yy(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} 0102yy(2x2y+y2)dxdy=0102ydy2yyx2dx+010y2dy2yydx=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} EV×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} EV×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×VR 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×VR 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×VR is the weight function where, ∀ v i , v j ∈ V \forall v_i,v_j\in \mathbf{V} vi,vjV, 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 rV 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 vV,! n0,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 rV 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 vV,! 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)=uu=ϕ,那么由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) vV{ϕ} 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 vV{ϕ},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 0n1,-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} 111511124111113116111   注意,上面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 rV 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 vV,! 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值