集合
集合:一定范围内的、确定的、并且彼此可以区分的对象汇集在一起形成的整体叫做集合(set),简称为集(set)
元素:集合的成员为该集合的元素(element)
基数:集合中元素个数
集合的描述形式有列举法和命题法两种
集合的运算
- 并( ∪ \cup ∪)
- 交( ∩ \cap ∩)
- 差( − - −)
- 对称差( ⊕ \oplus ⊕)
- 笛卡尔积(
×
\times
×)
A × B = { ( a , b ) ∣ a ∈ A & b ∈ B } A\times B =\{ (a,b) | a \in A \& b \in B\} A×B={(a,b)∣a∈A&b∈B} - 幂集(
2
A
2^A
2A)
所有集合子集(包含本身和空集) - 补集( A ‾ \overline A A)
令A = {1,2,3},B = {2,3,4},U = {1,2,3,4}
则
A
∪
B
=
{
1
,
2
,
3
,
4
}
,
A
∩
B
=
{
2
,
3
}
,
A
−
B
=
{
1
}
,
A
⊕
B
=
{
1
,
4
}
,
A
×
B
=
{
(
1
,
2
)
,
(
1
,
3
)
,
(
1
,
4
)
,
(
2
,
2
)
,
(
2
,
3
)
,
(
2
,
4
)
,
(
3
,
2
)
,
(
3
,
3
)
,
(
3
,
4
)
}
,
2
A
=
{
∅
,
{
1
}
,
{
2
}
,
{
3
}
,
{
1
,
2
}
,
{
1
,
3
}
,
{
2
,
3
}
,
{
1
,
2
,
3
}
}
,
A
‾
=
{
4
}
A\cup B=\{1,2,3,4\},A\cap B=\{2,3\},A-B=\{1\},A\oplus B=\{1,4\},A\times B = \{(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,2),(3,3),(3,4)\},2^A=\{\empty , \{1\},\{2\},\{3\},\{1,2\},\{1,3\},\{2,3\},\{1,2,3\}\},\overline A = \{4\}
A∪B={1,2,3,4},A∩B={2,3},A−B={1},A⊕B={1,4},A×B={(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,2),(3,3),(3,4)},2A={∅,{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}},A={4}
关系
二元关系
二元关系:任意的
R
⊆
A
×
B
R\subseteq A\times B
R⊆A×B ,称
R
R
R为
A
A
A到
B
B
B上的二元关系。
表示:
(
a
,
b
)
∈
R
(a,b)\in R
(a,b)∈R也可表示为
a
R
b
aRb
aRb
两个域:A称为定义域,B称为值域
当
A
=
B
A = B
A=B时称
R
R
R为
A
A
A上的二元关系
几种二元关系性质
- 自反性 2.反自反 3.对称性 4. 反对称性 5. 传递性
ps:对称和反对称并不是互斥的
等价关系与等价类
等价关系:具有自反性、对称性、传递性的二元关系称为等价关系。
等价类:
S
S
S的满足如下要求的划分:
S
1
S_1
S1、
S
2
S_2
S2、
S
3
S_3
S3、…、
S
n
S_n
Sn、…称为S关于R的等价划分,
S
i
S_i
Si称为等价类。
(1)
S
=
S
1
∪
S
2
∪
S
3
∪
.
.
.
∪
S
n
∪
.
.
.
S = S_1\cup S_2\cup S_3\cup...\cup S_n\cup...
S=S1∪S2∪S3∪...∪Sn∪...
(2)如果
i
≠
j
i\not =j
i=j,则
S
i
∩
S
j
=
∅
S_i\cap S_j = \empty
Si∩Sj=∅
(3)对于任意的
i
i
i,
S
i
S_i
Si中的任意两个元素
a
a
a、
b
b
b,
a
R
b
aRb
aRb恒成立。
(4)对于任意的
i
i
i,
j
j
j,
i
≠
j
i\not =j
i=j,
S
i
S_i
Si中的任意元素
a
a
a和
S
j
S_j
Sj中的任意元素
b
b
b,
a
R
b
aRb
aRb恒不成立
关系的合成
设
R
1
⊆
A
×
B
R_1\subseteq A\times B
R1⊆A×B是
A
A
A到
B
B
B 的关系、
R
2
⊆
B
×
C
R_2\subseteq B\times C
R2⊆B×C是
B
B
B到
C
C
C的关系,
R
1
R_1
R1与
R
2
R_2
R2的合成
R
1
R
2
R_1R_2
R1R2是
A
A
A到
C
C
C的关系:
R
1
R
2
=
{
(
a
,
c
)
∣
∃
(
a
,
b
)
∈
R
1
且
(
b
,
c
)
∈
R
2
}
R_1R_2= \{(a,c)|\exists(a,b)\in R_1且(b,c)\in R_2\}
R1R2={(a,c)∣∃(a,b)∈R1且(b,c)∈R2}
关系的闭包
设P是关于关系的性质的集合,关系R的P闭包(closure)是包含R并且具有P中所有性质的最小关系。
正闭包(传递闭包)
(1)
R
⊆
R
+
R\subseteq R^+
R⊆R+。
(2)如果
(
a
,
b
)
(a,b)
(a,b),
(
b
,
c
)
∈
R
+
(b,c)\in R^+
(b,c)∈R+,则
(
a
,
c
)
∈
R
+
(a,c)\in R^+
(a,c)∈R+。
(3)除(1)、(2)外,
R
+
R^+
R+不再含有其他任何元素。
具有传递性
对于任意的关系R,有
R
+
=
R
∪
R
2
∪
R
3
∪
.
.
.
∪
R
n
∪
.
.
.
.
R^+ = R\cup R^2 \cup R^3\cup ... \cup R^n \cup ....
R+=R∪R2∪R3∪...∪Rn∪....
当S为有穷集(元素所属于的集合)时,有
R
+
=
R
∪
R
2
∪
R
3
∪
.
.
.
∪
R
∣
S
∣
R^+ = R \cup R^2 \cup R^3\cup ... \cup R^{|S|}
R+=R∪R2∪R3∪...∪R∣S∣
提供一种求出
R
+
R^+
R+的一套算法(S为有穷集时,这是我自己想的,还没有证明)
step1:
求出
R
2
R^2
R2,令
Δ
R
=
R
2
−
R
,
R
=
R
2
∪
R
\Delta R = R^2-R,R = R^2\cup R
ΔR=R2−R,R=R2∪R
step2:
R
′
=
Δ
R
R
∪
R
Δ
R
R' = \Delta RR\cup R\Delta R
R′=ΔRR∪RΔR
Δ
R
′
=
R
′
−
R
\Delta R' = R' - R
ΔR′=R′−R
R
=
R
∪
R
′
R = R\cup R'
R=R∪R′
若
Δ
R
′
=
=
∅
\Delta R'==\empty
ΔR′==∅,则结束算法,此时
R
+
=
=
R
R^+==R
R+==R
若
Δ
R
′
≠
∅
\Delta R'\not=\empty
ΔR′=∅,则令
Δ
R
=
Δ
R
′
\Delta R=\Delta R'
ΔR=ΔR′,转step2
PS:“=”均表示赋值
# python代码实现
def getmutify(set1,set2):
s = set()
for item1 in set1:
for item2 in set2:
if item1[1] == item2[0]:
s.add(item1[0]+item2[1])
return s
def getPositiveClosure(R):
R_2 = getmutify(R,R)
detR = R_2 - R
R = R.union(R_2)
while True:
Rc = getmutify(detR,R).union(getmutify(R,detR))
detRc = Rc - R
R = R.union(Rc)
if len(detRc) == 0:
return R
detR = detRc
s = getPositiveClosure({"ab","bb","bc"})
print(s) #{'ac', 'ab', 'bc', 'bb'}
克林闭包
(1)
R
0
⊆
R
∗
,
R
⊆
R
∗
R^0\subseteq R^*,R\subseteq R^*
R0⊆R∗,R⊆R∗。
(2)如果
(
a
,
b
)
(a,b)
(a,b),
(
b
,
c
)
∈
R
∗
(b,c)\in R^*
(b,c)∈R∗,则
(
a
,
c
)
∈
R
∗
(a,c)\in R^*
(a,c)∈R∗。
(3)除(1)、(2)外,
R
∗
R^*
R∗不再含有其他任何元素。
具有自反性、传递性
语言
语言:某个集合中的元素,按照规则组合成的符号串的集合。
形式语言理论:用数学方法,对语言的表示法、结构及特性进行研究的理论。
(1)怎么构造语言
(2)怎么识别语言
(3)怎么去分析语言的含义
自动机理论:克林在研究神经细胞中,建立了识别语言的系统——有穷状态自动机。
(1)文法与自动机是等价的。
(2)文法与自动机的运算对象:集合。
基本概念
1.字母表:字母表是一个非空有穷集合,字母表中的元素称为该字母表的一个字母(letter)。又叫做符号(symbol)、或者字符(character)。通常用
∑
\sum
∑符号表示。
字符两个特性
(1)整体性,也叫不可分性。
(2)可辨认性,也叫可区分性。
2.字母表的乘积:
∑
1
∑
2
=
{
a
b
∣
a
∈
∑
1
,
b
∈
∑
2
}
\sum_{1}\sum_2=\{ab|a\in \sum_1,b\in \sum_2\}
∑1∑2={ab∣a∈∑1,b∈∑2}
个人感觉类似于笛卡尔乘积。
3.字母表
∑
\sum
∑的
n
n
n次幂
∑
0
=
{
ε
}
\sum^0=\{\varepsilon\}
∑0={ε}
∑
n
=
∑
n
−
1
∑
\sum^n=\sum^{n-1}\sum
∑n=∑n−1∑
其中,
ε
\varepsilon
ε是由
∑
\sum
∑中的0个字符组成的。
∣
{
ε
}
∣
=
1
|\{\varepsilon\}|=1
∣{ε}∣=1,
∣
ε
∣
=
0
|\varepsilon|=0
∣ε∣=0。
4.
∑
\sum
∑的正闭包和克林闭包
∑
+
=
∑
∪
∑
2
∪
∑
3
∪
.
.
.
\sum^+=\sum\cup \sum^2\cup \sum^3\cup...
∑+=∑∪∑2∪∑3∪...
∑
∗
=
∑
0
∪
∑
+
\sum^*=\sum^0\cup\sum^+
∑∗=∑0∪∑+
正闭包和克林闭包都是集合。其中,正闭包是由
∑
\sum
∑中至少一个字符连接而成,而克林闭包可以不含
∑
\sum
∑中的字符。
5.句子
∑
\sum
∑是一个字母表,
∀
x
∈
∑
∗
\forall x\in \sum^*
∀x∈∑∗,
x
x
x叫做
∑
\sum
∑上的一个句子。
6.句子的长度
∀
x
∈
∑
∗
\forall x\in \sum^*
∀x∈∑∗,句子
x
x
x中字符出现的总个数叫做该句子的长度,记作
∣
x
∣
|x|
∣x∣。
7.并置
x
,
y
∈
∑
∗
x,y\in\sum^*
x,y∈∑∗,
x
x
x,
y
y
y的并置是由串
x
x
x直接相接串
y
y
y所组成的。记作
x
y
xy
xy。并置又叫做连结。
8.串x的n次幂
x
0
=
ε
x^0=\varepsilon
x0=ε
x
n
=
x
n
−
1
x
x^n = x^{n-1}x
xn=xn−1x
9.前缀和后缀
设
x
x
x,
y
y
y,
z
z
z,
w
w
w,
v
∈
∑
∗
v\in\sum^*
v∈∑∗,且
x
=
y
z
x=yz
x=yz,
w
=
y
v
w=yv
w=yv
(1)
y
y
y是
x
x
x的前缀,若
∣
z
∣
≠
0
|z|\not = 0
∣z∣=0,则称
y
y
y为
x
x
x的真前缀
(2)
z
z
z是
x
x
x的后缀,若
∣
y
∣
≠
0
|y|\not = 0
∣y∣=0,则称
z
z
z为
x
x
x的真后缀
(3)
y
y
y是
x
x
x和
w
w
w的公共前缀
(4)如果
x
x
x和
w
w
w的任何公共前缀都是
y
y
y的前缀,则
y
y
y是
x
x
x和
w
w
w的最大公共前缀
(5)如果
x
=
z
y
x=zy
x=zy,
w
=
v
y
w=vy
w=vy,则
y
y
y是
x
x
x和
w
w
w的公共后缀
(6)如果
x
x
x和
w
w
w的任何公共后缀都是
y
y
y的后缀,则
y
y
y是
x
x
x和
w
w
w的最大公共后缀
10.子串
w
w
w,
x
x
x,
y
y
y,
z
∈
∑
∗
z\in \sum^*
z∈∑∗,且
w
=
x
y
z
w=xyz
w=xyz,则称
y
y
y是
w
w
w的子串。
(1)
t
t
t,
u
u
u,
v
v
v,
w
w
w,
x
x
x,
y
y
y,
z
∈
∑
∗
z\in\sum^*
z∈∑∗,且
t
=
u
y
v
t=uyv
t=uyv,
w
=
x
y
z
w=xyz
w=xyz,则称
y
y
y是
t
t
t和
w
w
w的公共子串。如果
y
1
y_1
y1,
y
2
y_2
y2,……,
y
n
y_n
yn是
t
t
t和
w
w
w的公共子串,且有
∣
y
j
∣
=
m
a
x
{
∣
y
1
∣
,
∣
y
2
∣
,
…
,
∣
y
n
∣
}
|y_j|=max\{|y_1|,|y_2|,…,|y_n|\}
∣yj∣=max{∣y1∣,∣y2∣,…,∣yn∣},则称
y
j
y_j
yj是
t
t
t和
w
w
w的最大公共子串。
PS:两个串的最大公共子串不一定是唯一的。
11.语言
∀
L
⊆
∑
∗
\forall L\subseteq \sum^*
∀L⊆∑∗,
L
L
L称为字母表
∑
\sum
∑上的一个语言,
∀
x
∈
L
\forall x\in L
∀x∈L,
x
x
x叫做
L
L
L的一个句子。
12.语言的乘积
L
1
⊆
∑
1
∗
L_1\subseteq \sum_1^*
L1⊆∑1∗,
L
2
⊆
∑
2
∗
L_2\subseteq \sum_2^*
L2⊆∑2∗,语言
L
1
L_1
L1与
L
2
L_2
L2的乘积是一个语言,该语言定义为:
L
1
L
2
=
{
x
y
∣
x
∈
L
1
,
y
∈
L
2
}
L_1L_2=\{xy|x\in L_1,y\in L_2\}
L1L2={xy∣x∈L1,y∈L2}是字母表
∑
1
∪
∑
2
\sum_1\cup \sum_2
∑1∪∑2上的语言。