定义二重组为两个元素
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,...,an−1>,an>,其第一分量是
n
−
1
n-1
n−1 重组,即
<
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>∣a∈A,b∈B},是一个以二重组为元素的集合。
依此类推,
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>∣ai∈Ai,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)∣=2∣S∣该式同样给出了一个笛卡尔积上有多少个关系。
一个谓词
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>∣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> 是有限次使用归纳步骤得到。
关系中最重要的是二元关系,二元关系
<
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,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.
定义等价关系为集合
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,b∈I,如果对于某个整数
m
m
m
a
−
b
=
m
⋅
k
a-b=m·k
a−b=m⋅k 成立,那么
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)
a≡b(modk),同余关系在数论中是使用极多的理论,我们熟悉的扩展欧几里得算法以及RSA加密体系中都涉及到同余关系以及线性同余方程。上述内容详细可以参考《扩展欧几里得算法》《RSA体系(一)数学基础》《RSA体系(二)加密解密算法》.
等价类.
设
R
R
R 是集合
A
A
A 上的等价关系,对于
∀
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],称
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,b∈A,
[
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=x∈A⋃[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=1⋃nAi那么集合族
π
\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=1⋃nAi
A
i
⋂
A
j
=
∅
,
i
≠
j
A_i\bigcap A_j=\emptyset,i≠j
Ai⋂Aj=∅,i=j那么集合族
π
\pi
π 称为集合
A
A
A 的划分。
划分中的元素
A
i
A_i
Ai 称为划分的块,若划分是有限集合,那么划分中的元素个数,或者说块数,称为划分的秩。
根据上部分的定理二、三,可以发现等价类集合
{
[
a
]
∣
a
∈
A
}
\{[a]|a\in A\}
{[a]∣a∈A} 是集合
A
A
A 的划分,我们称该集合
{
[
a
]
∣
a
∈
A
}
\{[a]|a\in A\}
{[a]∣a∈A} 为商集
A
/
R
A/R
A/R,读作
A
A
A 模
R
R
R.
关系除了作为集合进行集合的交并补运算意外,其本身有特殊运算合成,其形式化定义如下:
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]\}
R1⋅R2={<a,c>∣a∈A∧c∈C∧∃b[b∈B∧<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>∣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>}. 其直观解法就是在两个关系的序偶中寻找
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)
MR⋅S=k=1⋁n(aik⋀bkj)具体到上面的例子中为
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]
MR⋅S=⎣⎢⎢⎡000100100100⎦⎥⎥⎤⋅⎣⎡100010001⎦⎤=⎣⎢⎢⎡000100100100⎦⎥⎥⎤
上面定义了关系的合成,考虑到一个关系可以和自己合成,于是衍生出关系的幂:
R
0
=
{
<
x
,
x
>
∣
x
∈
A
}
R^0=\{<x,x>|x\in A\}
R0={<x,x>∣x∈A}
R
n
+
1
=
R
n
⋅
R
R^{n+1}=R^n·R
Rn+1=Rn⋅R
当
n
≥
∣
A
∣
n≥|A|
n≥∣A∣ 时有:
R
n
⊆
⋃
i
=
1
∣
A
∣
R
i
R^n\subseteq\bigcup_{i=1}^{|A|}R^i
Rn⊆i=1⋃∣A∣Ri
二元关系的逆关系形式化定义如下:
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'
R⊆R′,对于任意的对称关系
R
′
′
R''
R′′,有下面断言成立:
i
f
R
⊆
R
′
′
,
t
h
e
n
R
′
⊆
R
′
′
.
if~R\subseteq R'',then~R'\subseteq R''.
ifR⊆R′′,thenR′⊆R′′.
自反、对称以及传递闭包分别记为
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)=R⋃E
s
(
R
)
=
R
⋃
R
~
s(R)=R\bigcup\tilde{R}
s(R)=R⋃R~
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=1⋃∞Ri=i=1⋃∣A∣Ri
除等价关系以外,重要的二元关系还有偏序关系,定义为集合
A
A
A 上满足自反、传递以及反对称的关系
R
R
R,序偶
<
A
,
R
>
<A,R>
<A,R> 称为偏序集合,即集合+某种偏序。偏序的符号是
⪯
\preceq
⪯,由于难以书写,常以
≤
≤
≤ 代替,因为
≤
≤
≤ 是一种典型的偏序关系。
注意到偏序中不是
A
A
A 中所有元素之间都可以有关系的,例如上面的整除关系,
2
,
3
2,3
2,3 就不存在整除关系,也叫做不可比较。这里对于比较的定义是:如果对于偏序
⪯
\preceq
⪯,存在
a
⪯
b
a\preceq b
a⪯b 或
b
⪯
a
b\preceq a
b⪯a,那么称
a
,
b
a,b
a,b 是可比较的,显然偏序集中的元素不全是可比较的,这也是"偏"因何得名。
对于偏序集
<
A
,
⪯
>
<A,\preceq>
<A,⪯> 而言,如果
∀
a
,
b
∈
A
\forall a,b\in A
∀a,b∈A,或
a
⪯
b
a\preceq b
a⪯b 或
b
⪯
a
b\preceq a
b⪯a,那么
⪯
\preceq
⪯ 称为
A
A
A 上的全序。显然整数集上的
≤
≤
≤ 关系不仅是偏序关系,还是全序关系。
一个对有限集合
A
A
A 构造全序的方法是对
A
A
A 中元素列表,如果
a
a
a 在表中位于
b
b
b 之前,则指定
a
⪯
b
a\preceq b
a⪯b,该过程即拓扑分类。
定义最小元素
b
b
b 为偏序集合
<
A
,
⪯
>
<A,\preceq>
<A,⪯> 中满足
∀
x
∈
B
,
b
⪯
x
\forall x\in B,b\preceq x
∀x∈B,b⪯x的元素,其中
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.
x≤y. 其中
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},a≤b,该线序集是没有最小元素的,因为
a
n
+
1
b
≤
a
n
b
.
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∣ 时在词典序中
x
x
x 位于
y
y
y 之前,那么
x
≤
y
.
x≤y.
x≤y. 其中
∣
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() 完成。