【Practical】等价关系
文章目录
- 概述.
- 笛卡尔积.
- n重组.
- 集合.
- 关系.
- 二元关系.
- 二元关系特性.
- 等价关系.
- 等价类.
- 划分.
- 提要.
- C++.
概述.
- 等价关系 Equivalence Relation是一类重要的二元关系,这一类关系在生活中出现频繁,例如 <同乡关系>,Y和L是同乡,L和K是同乡,那么Y和K也是同乡。(假定一个人只有一个故乡)
- 在介绍等价关系之前,首先要明确什么是关系;而要知道什么是关系,就需要明确集合笛卡尔积的概念。
笛卡尔积.
- 笛卡尔积又称为叉积,是集合间的重要运算,后续在关系数据库理论中应用广泛。
n重组.
- 定义二重组为两个元素 a1,a2a_1,a_2a1,a2 组成的序列 <a1,a2><a_1,a_2><a1,a2>,a1a_1a1 称为二重组的第一分量,a2a_2a2 称为二重组的第二分量。
- 定义二重组 <a,b>,<c,d><a,b>,<c,d><a,b>,<c,d> 相等当且仅当 a=b,c=da=b,c=da=b,c=d,即对应位置的分量相等。
- 定义 nnn 重组 <a1,a2,...,an>=<<a1,a2,...,an−1>,an><a_1,a_2,...,a_n>=<<a_1,a_2,...,a_{n-1}>,a_n><a1,a2,...,an>=<<a1,a2,...,an−1>,an>,其第一分量是 n−1n-1n−1 重组,即 <1,2,3><1,2,3><1,2,3> 代表的是 <<1,2>,3>.<<1,2>,3>.<<1,2>,3>.
- 不难发现,nnn重组是有序的,即 <1,2>≠<2,1>.<1,2>≠<2,1>.<1,2>=<2,1>.
集合.
- 定义两个集合 A,BA,BA,B 的笛卡尔积 A×B={<a,b>∣a∈A,b∈B}A×B=\{<a,b>|a\in A,b\in B\}A×B={<a,b>∣a∈A,b∈B},是一个以二重组为元素的集合。
- 依此类推,nnn 个集合的笛卡尔积×i=1nAi={<a1,a2,...,an>∣ai∈Ai,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>∣ai∈Ai,i=1,2,...,n}.
- 若 ∣Ai∣=ki|A_i|=k_i∣Ai∣=ki,那么 ∣×i=1nAi∣=∏i=1nki.|\times_{i=1}^nA_i|=\prod_{i=1}^nk_i.∣×i=1nAi∣=∏i=1nki.
关系.
- 定义笛卡尔积 A×BA\times BA×B 的子集叫做 AAA 到 BBB 的一个二元关系,也叫做 A×BA\times BA×B 上的一个二元关系。此处仅有两个集合进行叉积,得到的关系中元素是序偶,称其为二元关系合情合理。
- 依此类推,定义笛卡尔积 ×i=1nAi\times^n_{i=1}A_i×i=1nAi 的子集为 ×i=1nAi\times^n_{i=1}A_i×i=1nAi 上的一个 nnn 元关系。特殊地,若 Ai=A,i=1,2,...nA_i=A,i=1,2,...nAi=A,i=1,2,...n,该关系可以称为 AAA 上的 nnn 元关系。
- 因此关系的本质是集合,一切用于定义集合的方法都可以用于定义关系。最基本地,可以列举出关系中的元素。
- 集合与子集的关系由下式给出:∣ρ(S)∣=2∣S∣|\rho(S)|=2^{|S|}∣ρ(S)∣=2∣S∣该式同样给出了一个笛卡尔积上有多少个关系。
- 一个谓词 P(x1,x2,...,xn)P(x_1,x_2,...,x_n)P(x1,x2,...,xn) 可以定义一个关系 R={<x1,x2,...,xn>∣P(x1,x2,...,xn)}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>∣x∈N∧y∈N∧x<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,y∈N,<x,y>∈< 当且仅当 <x,y><x,y><x,y> 是有限次使用归纳步骤得到。 - 笛卡尔积中有两个特殊子集:空集 ∅\emptyset∅ 和全集,前者称为空关系,后者称为全域关系。
二元关系.
- 关系中最重要的是二元关系,二元关系 <x,y>∈R<x,y>\in R<x,y>∈R 可以直观地记为 xRyxRyxRy,称为中缀记法,例如小于关系 <x,y>∈<⇔x<y.<x,y>\in<\Leftrightarrow x<y.<x,y>∈<⇔x<y.
- 二元关系有一些专有概念,对于 A×BA\times BA×B 上的关系 RRR 而言,AAA 是其前域,BBB 是其陪域。
- 关系 RRR 的定义域 D(R)={x∣∃y,<x,y>∈R}.D(R)=\{x|\exist~y,<x,y>\in R\}.D(R)={x∣∃ y,<x,y>∈R}.
- 关系 RRR 的值域 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={a1,a2},B={b1,b2,b3},R={<a1,b1>,<a2,b1>,<a1,b3>,<a2,b2>}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>},那么关系矩阵表示如下:
MR=[101110]∈R2×3M_R=\left[ \begin{matrix} 1 & 0 & 1 \\ 1& 1 & 0 \\ \end{matrix} \right]\in R^{2\times3}MR=[110110]∈R2×3
二元关系特性.
- 二元关系的讨论中涉及很多特殊性质,等价关系就是满足一些性质的特殊二元关系。下面的讨论针对集合 AAA 上的二元关系 RRR 进行。
- 【自反】∀x,x∈A→<x,x>∈R.\forall x,x\in A\rightarrow <x,x>\in R.∀x,x∈A→<x,x>∈R.
- 【反自反】∀x,x∈A→<x,x>∉R.\forall x,x\in A\rightarrow <x,x>\notin R.∀x,x∈A→<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.∀x∀y,(x∈A∧y∈A∧<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.∀x∀y,(x∈A∧y∈A∧<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.∀x∀y∀z,(x∈A∧y∈A∧z∈A∧<x,y>∈R∧<y,z>∈R)→<x,z>∈R.
- 显然上述性质中,名称里带有"反"的一对性质并不是互斥的,有的关系既非自反也非反自反;有的关系既非对称又非反对称;空关系既对称又反对称。
- 有趣的是,非空集合上的空关系满足反自反、对称、反对称、传递,唯独缺了自反;而空集合上的空关系满足上面五条性质,根据定义判断即可明白差别。
等价关系.
- 定义等价关系为集合 AAA 上自反、对称、传递的二元关系,是一种重要的二元关系。下面关于等价关系的描述都可以代入开篇的 <同乡关系> 来具体化理解。
- 【自反】任何人都和自己是同乡,这么说虽然奇怪,但百分百正确。对应于 AAA 中任一元素都和自己等价。
- 【对称】Y和L是同乡,L没理由不和Y同乡。对应于 AAA 中元素 a1a_1a1 和 a2a_2a2 等价,反过来 a2a_2a2 必然和 a1a_1a1 等价。
- 【传递】 这就是开篇那个例子,Y和L是同乡,L和K是同乡,那么Y和K也是同乡。
- 整数域(及其子集)上的模数等价是一类极为重要的等价关系,设 kkk 是正整数,a,b∈Ia,b\in Ia,b∈I,如果对于某个整数 mmm a−b=m⋅ka-b=m·ka−b=m⋅k 成立,那么 a,ba,ba,b 称为模 kkk 等价。
- 从另一个角度理解,模 kkk 等价即为模 kkk 同余,记作a≡b(modk)a\equiv b(mod~k)a≡b(mod k),同余关系在数论中是使用极多的理论,我们熟悉的扩展欧几里得算法以及RSA加密体系中都涉及到同余关系以及线性同余方程。上述内容详细可以参考《扩展欧几里得算法》《RSA体系(一)数学基础》《RSA体系(二)加密解密算法》.
等价类.
- 设 RRR 是集合 AAA 上的等价关系,对于 ∀a∈A\forall a\in A∀a∈A 定义其等价类 [a]R={x∣<x,a>∈R}[a]_R=\{x|<x,a>\in R\}[a]R={x∣<x,a>∈R}简记为 [a][a][a],称 aaa 为该等价类的表示元素,如果等价类的个数有限,那么称不同等价类的个数为关系 RRR 的秩。
- 等价类可以用数学语言描述为x∈[a]⇔<x,a>∈Rx\in[a]\Leftrightarrow<x,a>\in Rx∈[a]⇔<x,a>∈R
- 注意到等价类是非空的,因为等价关系满足自反,即 <a,a>∈R<a,a>\in R<a,a>∈R,即 a∈[a]R.a\in[a]_R.a∈[a]R.
- 【定理一】设 RRR 是非空集合 AAA 上的等价关系,<a,b>∈R⇔[a]=[b].<a,b>\in R\Leftrightarrow[a]=[b].<a,b>∈R⇔[a]=[b].
- 该定理说明等价类中的任意一个元素,都可以是等价类的表示元素。
- 【定理二】设 RRR 是集合 AAA 上的等价关系,那么 ∀a,b∈A\forall a,b\in A∀a,b∈A,[a]=[b][a]=[b][a]=[b] 和 [a]⋂[b]=∅[a]\bigcap[b]=\emptyset[a]⋂[b]=∅ 必然有一个成立。
- 该定理说明不同等价类之间不相交。
- 【定理三】设 RRR 是集合 AAA 上的等价关系,那么A=⋃x∈A[x]A=\bigcup_{x\in A}[x]A=x∈A⋃[x]
- 该定理说明等价关系 RRR 的等价类集合是 AAA 的一个覆盖。
- 定义覆盖 π={A1,A2,...,An}\pi=\{A_1,A_2,...,A_n\}π={A1,A2,...,An},若 A=⋃i=1nAiA=\bigcup_{i=1}^nA_iA=i=1⋃nAi那么集合族 π\piπ 是集合 AAA 的一个覆盖。
- 集合族本身也是集合,其元素为集合。等价类集合中的元素是等价关系 RRR 所确定的等价类。不同的等价关系可以诱导出不同的等价集合,例如在班级里按 <同乡关系> 诱导的等价类集合和按 <年龄相等关系> 诱导出的等价类集合。
划分.
- 给定非空集合 AAA 和非空集合族 π={A1,A2,...,An}\pi=\{A_1,A_2,...,A_n\}π={A1,A2,...,An},若满足A=⋃i=1nAiA=\bigcup_{i=1}^nA_iA=i=1⋃nAiAi⋂Aj=∅,i≠jA_i\bigcap A_j=\emptyset,i≠jAi⋂Aj=∅,i=j那么集合族 π\piπ 称为集合 AAA 的划分。
- 划分中的元素 AiA_iAi 称为划分的块,若划分是有限集合,那么划分中的元素个数,或者说块数,称为划分的秩。
- 写到这里插一句话,不完全统计,本篇中本质是集合但名字稀奇古怪的概念已经有:笛卡尔积、关系、覆盖、划分、集合族、等价类等等,它们都只是一类特定的、满足特殊性质或讨论要求的集合,这些名字能够给我们以关于它们直观的解释和透彻了解它之前的先验知识,但更重要的是不能忽略其集合本质。
- 直观地说,划分具有的性质是不重不漏,恰好覆盖了整个被划分集合,不同块之间又没有重叠,是最经济的覆盖。
- 根据上部分的定理二、三,可以发现等价类集合 {[a]∣a∈A}\{[a]|a\in A\}{[a]∣a∈A} 是集合 AAA 的划分,我们称该集合 {[a]∣a∈A}\{[a]|a\in A\}{[a]∣a∈A} 为商集 A/RA/RA/R,读作 AAA 模 RRR.
- 【细分】对于非空集合 AAA 的划分 π\piπ 和 π′\pi'π′ 而言,如果 π′\pi'π′ 的每一块都包含于 π\piπ 的一块中,就称 π′\pi'π′ 是 π\piπ 的细分。如果 π′≠π\pi'≠\piπ′=π,那么 π′\pi'π′ 是 π\piπ 的真细分。
- 直观上理解,细分就是划分程度更加彻底的划分,以撕纸为例,形象地说就是细分撕得更碎。
提要.
- 关系除了作为集合进行集合的交并补运算意外,其本身有特殊运算合成,其形式化定义如下:R1⋅R2={<a,c>∣a∈A∧c∈C∧∃b[b∈B∧<a,b>∈R1∧<b,c>∈R2]}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]\}R1⋅R2={<a,c>∣a∈A∧c∈C∧∃ b [ b∈B∧<a,b>∈R1∧<b,c>∈R2]}
- 直观地说就是在通过两个关系之间建立桥梁,将前者的前域中元素和后者的陪域中元素联系起来。而且,借助这样的直观感受,我们可以想到 R(R1)R(R_1)R(R1) 和 D(R2)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>∣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>},那么合成关系 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>\}.R⋅S={<x,z>∣x∈A∧z∈C∧x+z=5}={<2,3>,<4,1>,<3,2>}. 其直观解法就是在两个关系的序偶中寻找 RRR 第二分量等于 SSS 第一分量的组合,例如 <2,4>⋅<4,3>=<2,3>.<2,4>·<4,3>=<2,3>.<2,4>⋅<4,3>=<2,3>.
- 关系的合成对应到关系矩阵上为矩阵乘法,但采用的运算为逻辑乘与逻辑加,即 ∧\wedge∧ 与 ∨.\vee.∨. 设 MR=[aij],MS=[bij]M_R=[a_{ij}],M_S=[b_{ij}]MR=[aij],MS=[bij],则有:MR⋅S=⋁k=1n(aik⋀bkj)M_{R·S}=\bigvee_{k=1}^n\left(a_{ik}\bigwedge b_{kj}\right)MR⋅S=k=1⋁n(aik⋀bkj)具体到上面的例子中为MR⋅S=[000001010100]⋅[100010001]=[000001010100]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]MR⋅S=⎣⎢⎢⎡000100100100⎦⎥⎥⎤⋅⎣⎡100010001⎦⎤=⎣⎢⎢⎡000100100100⎦⎥⎥⎤
- 上面定义了关系的合成,考虑到一个关系可以和自己合成,于是衍生出关系的幂:R0={<x,x>∣x∈A}R^0=\{<x,x>|x\in A\}R0={<x,x>∣x∈A}Rn+1=Rn⋅RR^{n+1}=R^n·RRn+1=Rn⋅R
- 当 n≥∣A∣n≥|A|n≥∣A∣ 时有:Rn⊆⋃i=1∣A∣RiR^n\subseteq\bigcup_{i=1}^{|A|}R^iRn⊆i=1⋃∣A∣Ri
- 二元关系的逆关系形式化定义如下:R~={<y,x>∣<x,y>∈R}\tilde{R}=\{<y,x>|<x,y>\in R\}R~={<y,x>∣<x,y>∈R}表现在关系矩阵为转置。
- 关系的闭包运算是一元运算,它对关系进行扩充是其满足特殊性质,例如自反闭包、对称闭包和传递闭包;同时这种扩充又是最"节约的",即关系闭包是是 RRR 的超集中满足这些性质的最小关系,以对称闭包 R′R'R′ 为例,R⊆R′R\subseteq R'R⊆R′,对于任意的对称关系 R′′R''R′′,有下面断言成立:ifR⊆R′′,thenR′⊆R′′.if~R\subseteq R'',then~R'\subseteq R''.if R⊆R′′,then R′⊆R′′.
- 自反、对称以及传递闭包分别记为 r(R),s(R),t(R)r(R),s(R),t(R)r(R),s(R),t(R),对于二元关系 RRR 而言,它满足上述三个性质当且仅当 RRR 与其对应闭包相等。即 RRR 是自反闭包,当且仅当 R=r(R).R=r(R).R=r(R). 闭包的计算式如下:r(R)=R⋃Er(R)=R\bigcup Er(R)=R⋃Es(R)=R⋃R~s(R)=R\bigcup\tilde{R}s(R)=R⋃R~t(R)=⋃i=1∞Ri=⋃i=1∣A∣Rit(R)=\bigcup^{\infin}_{i=1}R^i=\bigcup^{|A|}_{i=1}R^it(R)=i=1⋃∞Ri=i=1⋃∣A∣Ri
- 除等价关系以外,重要的二元关系还有偏序关系,定义为集合 AAA 上满足自反、传递以及反对称的关系 RRR,序偶 <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表示,在图中隐去自反和传递边,并且边默认朝上有向。
- 注意到偏序中不是 AAA 中所有元素之间都可以有关系的,例如上面的整除关系,2,32,32,3 就不存在整除关系,也叫做不可比较。这里对于比较的定义是:如果对于偏序 ⪯\preceq⪯,存在 a⪯ba\preceq ba⪯b 或 b⪯ab\preceq ab⪯a,那么称 a,ba,ba,b 是可比较的,显然偏序集中的元素不全是可比较的,这也是"偏"因何得名。
- 对于偏序集 <A,⪯><A,\preceq><A,⪯> 而言,如果 ∀a,b∈A\forall a,b\in A∀a,b∈A,或 a⪯ba\preceq ba⪯b 或 b⪯ab\preceq ab⪯a,那么 ⪯\preceq⪯ 称为 AAA 上的全序。显然整数集上的 ≤≤≤ 关系不仅是偏序关系,还是全序关系。
- 一个对有限集合 AAA 构造全序的方法是对 AAA 中元素列表,如果 aaa 在表中位于 bbb 之前,则指定 a⪯ba\preceq ba⪯b,该过程即拓扑分类。
- 定义最小元素 bbb 为偏序集合 <A,⪯><A,\preceq><A,⪯> 中满足∀x∈B,b⪯x\forall x\in B,b\preceq x∀x∈B,b⪯x的元素,其中 BBB 是 AAA 的子集,bbb 称为 BBB 的最小元素。
- 对于全序 RRR 而言,如果集合 AAA 的任意非空子集都有最小元素,那么 RRR 称为 AAA 上的良序关系。例如 <N,≤><N,≤><N,≤> 就是一个良序集合,而 <I,≤><I,≤><I,≤> 不是良序集合。
- 通过已知的线序集、良序集可以诱导出新的线序、良序集,可以令新集合上的元素与原集合元素一一对应,应用原集合上的关系定义新关系。
- 一个典型的线序是词典序,它依据字母表序定义出: x,y∈Σ∗x,y\in\Sigma^*x,y∈Σ∗,若 xxx 是 yyy 的词头;或 x=zu,y=zvx=zu,y=zvx=zu,y=zv 的情况下,first[u]≤first[v]first[u]≤first[v]first[u]≤first[v],那么 x≤y.x≤y.x≤y. 其中 zzz 是 x,yx,yx,y 的最长公共词头,这里的 ≤≤≤ 即为词典序。
- 词典序非良序,考察集合 {b,ab,aab,aaab,...}\{b,ab,aab,aaab,...\}{b,ab,aab,aaab,...},Σ={a,b},a≤b\Sigma=\{a,b\},a≤bΣ={a,b},a≤b,该线序集是没有最小元素的,因为 an+1b≤anb.a^{n+1}b≤a^nb.an+1b≤anb.
- 标准序是典型的良序,其每一个非空子集都有最小元素。定义为:x,y∈Σ∗x,y\in\Sigma^*x,y∈Σ∗,若 ∣x∣<∣y∣|x|<|y|∣x∣<∣y∣;或 ∣x∣=∣y∣|x|=|y|∣x∣=∣y∣ 时在词典序中 xxx 位于 yyy 之前,那么 x≤y.x≤y.x≤y. 其中 ∣x∣|x|∣x∣ 代表字符串的长度,这里的 ≤≤≤ 是标准序。
- 对于上面在词典序中无最小元素的集合 {b,ab,aab,aaab,...}\{b,ab,aab,aaab,...\}{b,ab,aab,aaab,...},标准序下可以找到最小元素 b.b.b.
C++.
- 一般来说,在C/C++中进行字符串比较使用的是词典序,直观来说就是按照位置顺序比下去,以第一个【字符不同处】的码值大小作为两字符串大小的结果,举例如 aaaaab<aaaabaaaaab<aaaabaaaaab<aaaab 的比较结果是 111,显然如果按照标准序,上述结果应为 000,因为后者的长度更小;但在词典序中,是以索引 444 的两字符码值比较结果作为字符串的比较结果。
- 对于 stringstringstring 对象可以直接使用 <<< 等运算符来进行比较,已经完成了运算符重载;而对于 char∗char*char∗ 或 vector<char>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;
}
【Practical】等价关系相关推荐
- 相机模型--A Unifying Theory for Central Panoramic Systems and Practical Implications
A Unifying Theory for Central Panoramic Systems and Practical Implications ECCV 2000 Abstract Omnidi ...
- 侯捷译Practical Java(含源码)
侯捷译Practical Java(含源码) [url=http://www.123xz.net/soft/49/297/308/2007/20070517105923.html][B]侯捷译Prac ...
- Practical Common Lisp
Practical Common Lisp Practical Common Lisp
- Plenty Of Tricks to Get Irradiance Caching Practical
Plenty Of Tricks to Get Irradiance Caching Practical http://cgg.mff.cuni.cz/~jaroslav/papers/2008-ir ...
- 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
文章目录 一.一维数组形参退化 二.二维数组形参退化 三.数组形参等价关系 一.一维数组形参退化 C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int ar ...
- 近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上
近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上 相伴是整环上的等价关系 最大公因子建立在相伴所划分的等价类上 整除 最大公因子 博主是初学近世代数(群 ...
- practical python and opencv_Practical Python and OpenCV + Case Studies
conference: • CVPR - Computer Vision and Pattern Recognition • ICCV - International Conference on Co ...
- 第2本书:CCIE Practical Studies, Volume II-第5天
第2本书:CCIE Practical Studies, Volume II-第5天的笔记和实验手册,请随意下载 转载于:https://blog.51cto.com/xusilu/109102
- Range-v3 practical examples
Range-v3 - practical examples (walletfox.com)
最新文章
- HTML 基础知识(特殊字符的转义)
- 如何在SQL中使用JOIN执行UPDATE语句?
- Python之进程+线程+协程(并发与并行、GIL锁、同步锁、死锁、递归锁)
- mac通过android打电话,应用短评:用Mac打电话的意义在哪?
- SAP License:COPA分摊循环-FKART开票类型作为循环接收方
- 工作中的第一份LoadRunner脚本
- nsq php,NSQ 最佳实践
- Jquery cookies 记忆菜单
- ruhr启动mysql数据库_mysql报错:ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists...
- Java中的编译、反编译和反编译工具全家桶分享
- 希尔伯特变换(matlab)
- matlab作图有拉盖尔,拉盖尔高斯光束matlab
- html文字段落i排版,i排版怎么修改字体 字体排版详细介绍
- [离散数学]集合论基础P_4:运算定律及其证明
- java编程中常见的拼写错误
- php 项目如何运行_运行PHP项目(phpstorm+wampserver)
- poi word设置页眉图片,控制首页不同
- [usaco3.2.4]ratios
- 【企业】乔吉拉德之 250 定律
- 易盾php,GitHub - yidun/antispam-php-demo: 易盾反垃圾php演示