【Practical】等价关系

概述.

  • 等价关系 Equivalence Relation是一类重要的二元关系,这一类关系在生活中出现频繁,例如 <同乡关系>,Y和L是同乡,L和K是同乡,那么Y和K也是同乡。(假定一个人只有一个故乡)
  • 在介绍等价关系之前,首先要明确什么是关系;而要知道什么是关系,就需要明确集合笛卡尔积的概念。

笛卡尔积.

  • 笛卡尔积又称为叉积,是集合间的重要运算,后续在关系数据库理论中应用广泛。

n重组.

  • 定义二重组为两个元素 a 1 , a 2 a_1,a_2 a1,a2 组成的序列 < a 1 , a 2 > <a_1,a_2> <a1,a2> a 1 a_1 a1 称为二重组的第一分量, a 2 a_2 a2 称为二重组的第二分量。
  • 定义二重组 < a , b > , < c , d > <a,b>,<c,d> <a,b>,<c,d> 相等当且仅当 a = b , c = d a=b,c=d a=b,c=d,即对应位置的分量相等。
  • 定义 n n n 重组 < a 1 , a 2 , . . . , a n > = < < a 1 , a 2 , . . . , a n − 1 > , a n > <a_1,a_2,...,a_n>=<<a_1,a_2,...,a_{n-1}>,a_n> <a1,a2,...,an>=<<a1,a2,...,an1>,an>,其第一分量是 n − 1 n-1 n1 重组,即 < 1 , 2 , 3 > <1,2,3> <1,2,3> 代表的是 < < 1 , 2 > , 3 > . <<1,2>,3>. <<1,2>,3>.
  • 不难发现, n n n重组是有序的,即 < 1 , 2 > ≠ < 2 , 1 > . <1,2>≠<2,1>. <1,2>=<2,1>.

集合.

  • 定义两个集合 A , B A,B A,B 的笛卡尔积 A × B = { < a , b > ∣ a ∈ A , b ∈ B } A×B=\{<a,b>|a\in A,b\in B\} A×B={<a,b>aA,bB},是一个以二重组为元素的集合。
  • 依此类推, n n n 个集合的笛卡尔积 × i = 1 n A i = { < a 1 , a 2 , . . . , a n > ∣ a i ∈ A i , i = 1 , 2 , . . . , n } . {\times}^n_{i=1}A_i=\{<a_1,a_2,...,a_n>|a_i\in A_i,i=1,2,...,n\}. ×i=1nAi={<a1,a2,...,an>aiAi,i=1,2,...,n}.
  • ∣ A i ∣ = k i |A_i|=k_i Ai=ki,那么 ∣ × i = 1 n A i ∣ = ∏ i = 1 n k i . |\times_{i=1}^nA_i|=\prod_{i=1}^nk_i. ×i=1nAi=i=1nki.

关系.

  • 定义笛卡尔积 A × B A\times B A×B 的子集叫做 A A A B B B 的一个二元关系,也叫做 A × B A\times B A×B 上的一个二元关系。此处仅有两个集合进行叉积,得到的关系中元素是序偶,称其为二元关系合情合理。
  • 依此类推,定义笛卡尔积 × i = 1 n A i \times^n_{i=1}A_i ×i=1nAi 的子集为 × i = 1 n A i \times^n_{i=1}A_i ×i=1nAi 上的一个 n n n 元关系。特殊地,若 A i = A , i = 1 , 2 , . . . n A_i=A,i=1,2,...n Ai=A,i=1,2,...n,该关系可以称为 A A A 上的 n n n 元关系。
  • 因此关系的本质是集合,一切用于定义集合的方法都可以用于定义关系。最基本地,可以列举出关系中的元素。
  • 集合与子集的关系由下式给出: ∣ ρ ( S ) ∣ = 2 ∣ S ∣ |\rho(S)|=2^{|S|} ρ(S)=2S该式同样给出了一个笛卡尔积上有多少个关系。
  • 一个谓词 P ( x 1 , x 2 , . . . , x n ) P(x_1,x_2,...,x_n) P(x1,x2,...,xn) 可以定义一个关系 R = { < x 1 , x 2 , . . . , x n > ∣ P ( x 1 , x 2 , . . . , x n ) } R=\{<x_1,x_2,...,x_n>|P(x_1,x_2,...,x_n)\} R={<x1,x2,...,xn>P(x1,x2,...,xn)}. 出于完整性的考虑,我们将 { < x > ∣ P ( x ) } \{<x>|P(x)\} {<x>P(x)} 称为一元关系,它是一重组集合,包含论域上所有满足性质 P ( x ) P(x) P(x) 的元素的集合。以自然数的小于关系为例,可以将其定义为 < = { < x , y > ∣ x ∈ N ∧ y ∈ N ∧ x < y } . <=\{<x,y>|x\in N\wedge y\in N\wedge x<y\}. <={<x,y>xNyNx<y}.
  • 关系也可以归纳定义,还以自然数集上的小于关系 < < < 为例:
    【基础】 < 0 , 1 > ∈ < <0,1>\in< <0,1><
    【归纳】若 < x , y > ∈ < <x,y>\in< <x,y><,那么 < x , y + 1 > ∈ < , < x + 1 , y + 1 > ∈ < <x,y+1>\in<,<x+1,y+1>\in< <x,y+1><,<x+1,y+1><
    【极小性】 ∀ x , y ∈ N , < x , y > ∈ < \forall x,y\in N,<x,y>\in< x,yN,<x,y>< 当且仅当 < x , y > <x,y> <x,y> 是有限次使用归纳步骤得到。
  • 笛卡尔积中有两个特殊子集:空集 ∅ \emptyset 和全集,前者称为空关系,后者称为全域关系。

二元关系.

  • 关系中最重要的是二元关系,二元关系 < x , y > ∈ R <x,y>\in R <x,y>R 可以直观地记为 x R y xRy xRy,称为中缀记法,例如小于关系 < x , y > ∈ < ⇔ x < y . <x,y>\in<\Leftrightarrow x<y. <x,y><x<y.
  • 二元关系有一些专有概念,对于 A × B A\times B A×B 上的关系 R R R 而言, A A A 是其前域, B B B 是其陪域。
  • 关系 R R R 的定义域 D ( R ) = { x ∣ ∃   y , < x , y > ∈ R } . D(R)=\{x|\exist~y,<x,y>\in R\}. D(R)={x y,<x,y>R}.
  • 关系 R R R 的值域 R ( R ) = { y ∣ ∃   x , < x , y > ∈ R } . R(R)=\{y|\exist~x,<x,y>\in R\}. R(R)={y x,<x,y>R}.
  • 显然定义域是前域的子集,值域是陪域的子集。
  • 二元关系本质上作为一种集合,也可以进行集合间的交、并、补、差等运算,其意义较为直观,不再赘述。
  • 对于二元关系,我们可以很方便地使用布尔矩阵来表示,一般以前域标识行,陪域标识列,若元素间存在关系则为1,否则为0,称为关系矩阵。例如 A = { a 1 , a 2 } , B = { b 1 , b 2 , b 3 } , R = { < a 1 , b 1 > , < a 2 , b 1 > , < a 1 , b 3 > , < a 2 , b 2 > } A=\{a_1,a_2\},B=\{b_1,b_2,b_3\},R=\{<a_1,b_1>,<a_2,b_1>,<a_1,b_3>,<a_2,b_2>\} A={a1,a2},B={b1,b2,b3},R={<a1,b1>,<a2,b1>,<a1,b3>,<a2,b2>},那么关系矩阵表示如下:
    M R = [ 1 0 1 1 1 0 ] ∈ R 2 × 3 M_R=\left[ \begin{matrix} 1 & 0 & 1 \\ 1& 1 & 0 \\ \end{matrix} \right]\in R^{2\times3} MR=[110110]R2×3

二元关系特性.

  • 二元关系的讨论中涉及很多特殊性质,等价关系就是满足一些性质的特殊二元关系。下面的讨论针对集合 A A A 上的二元关系 R R R 进行。
  • 自反 ∀ x , x ∈ A → < x , x > ∈ R . \forall x,x\in A\rightarrow <x,x>\in R. x,xA<x,x>R.
  • 反自反 ∀ x , x ∈ A → < x , x > ∉ R . \forall x,x\in A\rightarrow <x,x>\notin R. x,xA<x,x>/R.
  • 对称 ∀ x ∀ y , ( x ∈ A ∧ y ∈ A ∧ < x , y > ∈ R ) → < y , x > ∈ R . \forall x\forall y,(x\in A\wedge y\in A\wedge <x,y>\in R)\rightarrow<y,x>\in R. xy,(xAyA<x,y>R)<y,x>R.
  • 反对称 ∀ x ∀ y , ( x ∈ A ∧ y ∈ A ∧ < x , y > ∈ R ∧ < y , x > ∈ R ) → x = y . \forall x\forall y,(x\in A\wedge y\in A\wedge <x,y>\in R\wedge<y,x>\in R)\rightarrow x=y. xy,(xAyA<x,y>R<y,x>R)x=y.
  • 传递 ∀ x ∀ y ∀ z , ( x ∈ A ∧ y ∈ A ∧ z ∈ A ∧ < x , y > ∈ R ∧ < y , z > ∈ R ) → < x , z > ∈ R . \forall x\forall y\forall z,(x\in A\wedge y\in A\wedge z\in A\wedge <x,y>\in R\wedge<y,z>\in R)\rightarrow<x,z>\in R. xyz,(xAyAzA<x,y>R<y,z>R)<x,z>R.
  • 显然上述性质中,名称里带有"反"的一对性质并不是互斥的,有的关系既非自反也非反自反;有的关系既非对称又非反对称;空关系既对称又反对称。
  • 有趣的是,非空集合上的空关系满足反自反、对称、反对称、传递,唯独缺了自反;而空集合上的空关系满足上面五条性质,根据定义判断即可明白差别。

等价关系.

  • 定义等价关系为集合 A A A 上自反、对称、传递的二元关系,是一种重要的二元关系。下面关于等价关系的描述都可以代入开篇的 <同乡关系> 来具体化理解。
  • 自反】任何人都和自己是同乡,这么说虽然奇怪,但百分百正确。对应于 A A A 中任一元素都和自己等价。
  • 对称】Y和L是同乡,L没理由不和Y同乡。对应于 A A A 中元素 a 1 a_1 a1 a 2 a_2 a2 等价,反过来 a 2 a_2 a2 必然和 a 1 a_1 a1 等价。
  • 传递】 这就是开篇那个例子,Y和L是同乡,L和K是同乡,那么Y和K也是同乡。

  • 整数域(及其子集)上的模数等价是一类极为重要的等价关系,设 k k k 是正整数, a , b ∈ I a,b\in I a,bI,如果对于某个整数 m m m a − b = m ⋅ k a-b=m·k ab=mk 成立,那么 a , b a,b a,b 称为模 k k k 等价。
  • 从另一个角度理解,模 k k k 等价即为模 k k k 同余,记作 a ≡ b ( m o d   k ) a\equiv b(mod~k) ab(mod k),同余关系在数论中是使用极多的理论,我们熟悉的扩展欧几里得算法以及RSA加密体系中都涉及到同余关系以及线性同余方程。上述内容详细可以参考扩展欧几里得算法RSA体系(一)数学基础RSA体系(二)加密解密算法.

等价类.

  • R R R 是集合 A A A 上的等价关系,对于 ∀ a ∈ A \forall a\in A aA 定义其等价类 [ a ] R = { x ∣ < x , a > ∈ R } [a]_R=\{x|<x,a>\in R\} [a]R={x<x,a>R}简记为 [ a ] [a] [a],称 a a a 为该等价类的表示元素,如果等价类的个数有限,那么称不同等价类的个数为关系 R R R 的秩。
  • 等价类可以用数学语言描述为 x ∈ [ a ] ⇔ < x , a > ∈ R x\in[a]\Leftrightarrow<x,a>\in R x[a]<x,a>R
  • 注意到等价类是非空的,因为等价关系满足自反,即 < a , a > ∈ R <a,a>\in R <a,a>R,即 a ∈ [ a ] R . a\in[a]_R. a[a]R.

  • 定理一】设 R R R 是非空集合 A A A 上的等价关系, < a , b > ∈ R ⇔ [ a ] = [ b ] . <a,b>\in R\Leftrightarrow[a]=[b]. <a,b>R[a]=[b].
  • 该定理说明等价类中的任意一个元素,都可以是等价类的表示元素。

  • 定理二】设 R R R 是集合 A A A 上的等价关系,那么 ∀ a , b ∈ A \forall a,b\in A a,bA [ a ] = [ b ] [a]=[b] [a]=[b] [ a ] ⋂ [ b ] = ∅ [a]\bigcap[b]=\emptyset [a][b]= 必然有一个成立。
  • 该定理说明不同等价类之间不相交。

  • 定理三】设 R R R 是集合 A A A 上的等价关系,那么 A = ⋃ x ∈ A [ x ] A=\bigcup_{x\in A}[x] A=xA[x]
  • 该定理说明等价关系 R R R 的等价类集合是 A A A 的一个覆盖
  • 定义覆盖 π = { A 1 , A 2 , . . . , A n } \pi=\{A_1,A_2,...,A_n\} π={A1,A2,...,An},若 A = ⋃ i = 1 n A i A=\bigcup_{i=1}^nA_i A=i=1nAi那么集合族 π \pi π 是集合 A A A 的一个覆盖。
  • 集合族本身也是集合,其元素为集合。等价类集合中的元素是等价关系 R R R 所确定的等价类。不同的等价关系可以诱导出不同的等价集合,例如在班级里按 <同乡关系> 诱导的等价类集合和按 <年龄相等关系> 诱导出的等价类集合。

划分.

  • 给定非空集合 A A A 和非空集合族 π = { A 1 , A 2 , . . . , A n } \pi=\{A_1,A_2,...,A_n\} π={A1,A2,...,An},若满足 A = ⋃ i = 1 n A i A=\bigcup_{i=1}^nA_i A=i=1nAi A i ⋂ A j = ∅ , i ≠ j A_i\bigcap A_j=\emptyset,i≠j AiAj=,i=j那么集合族 π \pi π 称为集合 A A A划分
  • 划分中的元素 A i A_i Ai 称为划分的块,若划分是有限集合,那么划分中的元素个数,或者说块数,称为划分的秩。

  • 写到这里插一句话,不完全统计,本篇中本质是集合但名字稀奇古怪的概念已经有:笛卡尔积、关系、覆盖、划分、集合族、等价类等等,它们都只是一类特定的、满足特殊性质或讨论要求的集合,这些名字能够给我们以关于它们直观的解释和透彻了解它之前的先验知识,但更重要的是不能忽略其集合本质。

  • 直观地说,划分具有的性质是不重不漏,恰好覆盖了整个被划分集合,不同块之间又没有重叠,是最经济的覆盖。
  • 根据上部分的定理二、三,可以发现等价类集合 { [ a ] ∣ a ∈ A } \{[a]|a\in A\} {[a]aA} 是集合 A A A 的划分,我们称该集合 { [ a ] ∣ a ∈ A } \{[a]|a\in A\} {[a]aA}商集 A / R A/R A/R,读作 A A A R R R.
  • 细分】对于非空集合 A A A 的划分 π \pi π π ′ \pi' π 而言,如果 π ′ \pi' π 的每一块都包含于 π \pi π 的一块中,就称 π ′ \pi' π π \pi π 的细分。如果 π ′ ≠ π \pi'≠\pi π=π,那么 π ′ \pi' π π \pi π 的真细分。
  • 直观上理解,细分就是划分程度更加彻底的划分,以撕纸为例,形象地说就是细分撕得更碎。

提要.

  • 关系除了作为集合进行集合的交并补运算意外,其本身有特殊运算合成,其形式化定义如下: R 1 ⋅ R 2 = { < a , c > ∣ a ∈ A ∧ c ∈ C ∧ ∃   b   [   b ∈ B ∧ < a , b > ∈ R 1 ∧ < b , c > ∈ R 2 ] } R_1·R_2=\{<a,c>|a\in A\wedge c\in C\wedge\exist~b~[~b\in B\wedge<a,b>\in R_1\wedge<b,c>\in R_2]\} R1R2={<a,c>aAcC b [ bB<a,b>R1<b,c>R2]}
  • 直观地说就是在通过两个关系之间建立桥梁,将前者的前域中元素和后者的陪域中元素联系起来。而且,借助这样的直观感受,我们可以想到 R ( R 1 ) R(R_1) R(R1) D ( R 2 ) D(R_2) D(R2) 交集一般不为空,否则合成的关系即为空关系。
  • 举例 A = { 1 , 2 , 3 , 4 } , B = { 2 , 3 , 4 } , C = { 1 , 2 , 3 } , R = { < x , y > ∣ x ∈ A ∧ y ∈ B ∧ x + y = 6 } = { < 2 , 4 > , < 4 , 2 > , < 3 , 3 > } , S = { < y , z > ∣ y ∈ B ∧ z ∈ C ∧ y − z = 1 } = { < 4 , 3 > , < 3 , 2 > , < 2 , 1 > } A=\{1,2,3,4\},B=\{2,3,4\},C=\{1,2,3\},R=\{<x,y>|x\in A\wedge y\in B\wedge x+y=6\}=\{<2,4>,<4,2>,<3,3>\},S=\{<y,z>|y\in B\wedge z\in C\wedge y-z=1\}=\{<4,3>,<3,2>,<2,1>\} A={1,2,3,4},B={2,3,4},C={1,2,3},R={<x,y>xAyBx+y=6}={<2,4>,<4,2>,<3,3>},S={<y,z>yBzCyz=1}={<4,3>,<3,2>,<2,1>},那么合成关系 R ⋅ S = { < x , z > ∣ x ∈ A ∧ z ∈ C ∧ x + z = 5 } = { < 2 , 3 > , < 4 , 1 > , < 3 , 2 > } . R·S=\{<x,z>|x\in A\wedge z\in C\wedge x+z=5\}=\{<2,3>,<4,1>,<3,2>\}. RS={<x,z>xAzCx+z=5}={<2,3>,<4,1>,<3,2>}. 其直观解法就是在两个关系的序偶中寻找 R R R 第二分量等于 S S S 第一分量的组合,例如 < 2 , 4 > ⋅ < 4 , 3 > = < 2 , 3 > . <2,4>·<4,3>=<2,3>. <2,4><4,3>=<2,3>.
  • 关系的合成对应到关系矩阵上为矩阵乘法,但采用的运算为逻辑乘与逻辑加,即 ∧ \wedge ∨ . \vee. . M R = [ a i j ] , M S = [ b i j ] M_R=[a_{ij}],M_S=[b_{ij}] MR=[aij],MS=[bij],则有: M R ⋅ S = ⋁ k = 1 n ( a i k ⋀ b k j ) M_{R·S}=\bigvee_{k=1}^n\left(a_{ik}\bigwedge b_{kj}\right) MRS=k=1n(aikbkj)具体到上面的例子中为 M R ⋅ S = [ 0 0 0 0 0 1 0 1 0 1 0 0 ] ⋅ [ 1 0 0 0 1 0 0 0 1 ] = [ 0 0 0 0 0 1 0 1 0 1 0 0 ] M_{R·S}= \left[ \begin{matrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{matrix} \right]·\left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right]=\left[ \begin{matrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{matrix} \right] MRS=000100100100100010001=000100100100

  • 上面定义了关系的合成,考虑到一个关系可以和自己合成,于是衍生出关系的幂: R 0 = { < x , x > ∣ x ∈ A } R^0=\{<x,x>|x\in A\} R0={<x,x>xA} R n + 1 = R n ⋅ R R^{n+1}=R^n·R Rn+1=RnR
  • n ≥ ∣ A ∣ n≥|A| nA 时有: R n ⊆ ⋃ i = 1 ∣ A ∣ R i R^n\subseteq\bigcup_{i=1}^{|A|}R^i Rni=1ARi

  • 二元关系的逆关系形式化定义如下: R ~ = { < y , x > ∣ < x , y > ∈ R } \tilde{R}=\{<y,x>|<x,y>\in R\} R~={<y,x><x,y>R}表现在关系矩阵为转置。

  • 关系的闭包运算是一元运算,它对关系进行扩充是其满足特殊性质,例如自反闭包、对称闭包和传递闭包;同时这种扩充又是最"节约的",即关系闭包是是 R R R 的超集中满足这些性质的最小关系,以对称闭包 R ′ R' R 为例, R ⊆ R ′ R\subseteq R' RR,对于任意的对称关系 R ′ ′ R'' R,有下面断言成立: i f   R ⊆ R ′ ′ , t h e n   R ′ ⊆ R ′ ′ . if~R\subseteq R'',then~R'\subseteq R''. if RR,then RR.
  • 自反、对称以及传递闭包分别记为 r ( R ) , s ( R ) , t ( R ) r(R),s(R),t(R) r(R),s(R),t(R),对于二元关系 R R R 而言,它满足上述三个性质当且仅当 R R R 与其对应闭包相等。即 R R R 是自反闭包,当且仅当 R = r ( R ) . R=r(R). R=r(R). 闭包的计算式如下: r ( R ) = R ⋃ E r(R)=R\bigcup E r(R)=RE s ( R ) = R ⋃ R ~ s(R)=R\bigcup\tilde{R} s(R)=RR~ t ( R ) = ⋃ i = 1 ∞ R i = ⋃ i = 1 ∣ A ∣ R i t(R)=\bigcup^{\infin}_{i=1}R^i=\bigcup^{|A|}_{i=1}R^i t(R)=i=1Ri=i=1ARi

  • 除等价关系以外,重要的二元关系还有偏序关系,定义为集合 A A A 上满足自反、传递以及反对称的关系 R R R,序偶 < A , R > <A,R> <A,R> 称为偏序集合,即集合+某种偏序。偏序的符号是 ⪯ \preceq ,由于难以书写,常以 ≤ ≤ 代替,因为 ≤ ≤ 是一种典型的偏序关系。
  • 整除关系是另一种重要的偏序关系,考虑集合 { 2 , 3 , 6 } \{2,3,6\} {2,3,6},其偏序关系整除为 { < 2 , 2 > , < 3 , 3 > , < 6 , 6 > , < 2 , 6 > , < 3 , 6 > } \{<2,2>,<3,3>,<6,6>,<2,6>,<3,6>\} {<2,2>,<3,3>,<6,6>,<2,6>,<3,6>}偏序集常以哈斯图Hasse表示,在图中隐去自反和传递边,并且边默认朝上有向。
  • 注意到偏序中不是 A A A 中所有元素之间都可以有关系的,例如上面的整除关系, 2 , 3 2,3 2,3 就不存在整除关系,也叫做不可比较。这里对于比较的定义是:如果对于偏序 ⪯ \preceq ,存在 a ⪯ b a\preceq b ab b ⪯ a b\preceq a ba,那么称 a , b a,b a,b可比较的,显然偏序集中的元素不全是可比较的,这也是"偏"因何得名。

  • 对于偏序集 < A , ⪯ > <A,\preceq> <A,> 而言,如果 ∀ a , b ∈ A \forall a,b\in A a,bA,或 a ⪯ b a\preceq b ab b ⪯ a b\preceq a ba,那么 ⪯ \preceq 称为 A A A 上的全序。显然整数集上的 ≤ ≤ 关系不仅是偏序关系,还是全序关系。
  • 一个对有限集合 A A A 构造全序的方法是对 A A A 中元素列表,如果 a a a 在表中位于 b b b 之前,则指定 a ⪯ b a\preceq b ab,该过程即拓扑分类

  • 定义最小元素 b b b 为偏序集合 < A , ⪯ > <A,\preceq> <A,> 中满足 ∀ x ∈ B , b ⪯ x \forall x\in B,b\preceq x xB,bx的元素,其中 B B B A A A 的子集, b b b 称为 B B B 的最小元素。
  • 对于全序 R R R 而言,如果集合 A A A 的任意非空子集都有最小元素,那么 R R R 称为 A A A 上的良序关系。例如 < N , ≤ > <N,≤> <N,> 就是一个良序集合,而 < I , ≤ > <I,≤> <I,> 不是良序集合。

  • 通过已知的线序集、良序集可以诱导出新的线序、良序集,可以令新集合上的元素与原集合元素一一对应,应用原集合上的关系定义新关系。
  • 一个典型的线序是词典序,它依据字母表序定义出: x , y ∈ Σ ∗ x,y\in\Sigma^* x,yΣ,若 x x x y y y 的词头;或 x = z u , y = z v x=zu,y=zv x=zu,y=zv 的情况下, f i r s t [ u ] ≤ f i r s t [ v ] first[u]≤first[v] first[u]first[v],那么 x ≤ y . x≤y. xy. 其中 z z z x , y x,y x,y 的最长公共词头,这里的 ≤ ≤ 即为词典序。
  • 词典序非良序,考察集合 { b , a b , a a b , a a a b , . . . } \{b,ab,aab,aaab,...\} {b,ab,aab,aaab,...} Σ = { a , b } , a ≤ b \Sigma=\{a,b\},a≤b Σ={a,b},ab,该线序集是没有最小元素的,因为 a n + 1 b ≤ a n b . a^{n+1}b≤a^nb. an+1banb.

  • 标准序是典型的良序,其每一个非空子集都有最小元素。定义为: x , y ∈ Σ ∗ x,y\in\Sigma^* x,yΣ,若 ∣ x ∣ < ∣ y ∣ |x|<|y| x<y;或 ∣ x ∣ = ∣ y ∣ |x|=|y| x=y 时在词典序中 x x x 位于 y y y 之前,那么 x ≤ y . x≤y. xy. 其中 ∣ x ∣ |x| x 代表字符串的长度,这里的 ≤ ≤ 是标准序。
  • 对于上面在词典序中无最小元素的集合 { b , a b , a a b , a a a b , . . . } \{b,ab,aab,aaab,...\} {b,ab,aab,aaab,...},标准序下可以找到最小元素 b . b. b.

C++.

  • 一般来说,在C/C++中进行字符串比较使用的是词典序,直观来说就是按照位置顺序比下去,以第一个【字符不同处】的码值大小作为两字符串大小的结果,举例如 a a a a a b < a a a a b aaaaab<aaaab aaaaab<aaaab 的比较结果是 1 1 1,显然如果按照标准序,上述结果应为 0 0 0,因为后者的长度更小;但在词典序中,是以索引 4 4 4 的两字符码值比较结果作为字符串的比较结果。
  • 对于 s t r i n g string string 对象可以直接使用 < < < 等运算符来进行比较,已经完成了运算符重载;而对于 c h a r ∗ char* char v e c t o r < c h a r > vector<char> vector<char> 类型表示的字符串,可以使用函数 lexicographical_compare() 完成。
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>

using namespace std;

int main()
{
	string a = "aaaaab";
	string ab = "aaaab";

	cout << (a < ab);

	vector<char> A(a.begin(), a.end());
	vector<char> AB(ab.begin(), ab.end());

	cout << lexicographical_compare(A.begin(), A.end(), AB.begin(), AB.end());

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值