集合
集合:一定范围内的、确定的、并且彼此可以区分的对象汇集在一起形成的整体叫做集合(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} - 幂集(2A2^A2A)
所有集合子集(包含本身和空集) - 补集(A‾\overline AA)
令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)},2A={∅,{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×BR\subseteq A\times BR⊆A×B ,称RRR为AAA到BBB上的二元关系。
表示:(a,b)∈R(a,b)\in R(a,b)∈R也可表示为aRbaRbaRb
两个域:A称为定义域,B称为值域
当A=BA = BA=B时称RRR为AAA上的二元关系
几种二元关系性质
- 自反性 2.反自反 3.对称性 4. 反对称性 5. 传递性
ps:对称和反对称并不是互斥的
等价关系与等价类
等价关系:具有自反性、对称性、传递性的二元关系称为等价关系。
等价类:SSS的满足如下要求的划分:S1S_1S1、S2S_2S2、S3S_3S3、…、SnS_nSn、…称为S关于R的等价划分,SiS_iSi称为等价类。
(1) S=S1∪S2∪S3∪...∪Sn∪...S = S_1\cup S_2\cup S_3\cup...\cup S_n\cup...S=S1∪S2∪S3∪...∪Sn∪...
(2)如果i≠ji\not =ji=j,则Si∩Sj=∅S_i\cap S_j = \emptySi∩Sj=∅
(3)对于任意的iii,SiS_iSi中的任意两个元素aaa、bbb,aRbaRbaRb恒成立。
(4)对于任意的iii,jjj,i≠ji\not =ji=j,SiS_iSi中的任意元素aaa和SjS_jSj中的任意元素bbb,aRbaRbaRb恒不成立
关系的合成
设R1⊆A×BR_1\subseteq A\times BR1⊆A×B是AAA到BBB 的关系、R2⊆B×CR_2\subseteq B\times CR2⊆B×C是BBB到CCC的关系,R1R_1R1与R2R_2R2的合成R1R2R_1R_2R1R2是AAA到CCC的关系:
R1R2={(a,c)∣∃(a,b)∈R1且(b,c)∈R2}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∪R2∪R3∪...∪Rn∪....R^+ = R\cup R^2 \cup R^3\cup ... \cup R^n \cup ....R+=R∪R2∪R3∪...∪Rn∪....
当S为有穷集(元素所属于的集合)时,有
R+=R∪R2∪R3∪...∪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:
求出R2R^2R2,令ΔR=R2−R,R=R2∪R\Delta R = R^2-R,R = R^2\cup RΔR=R2−R,R=R2∪R
step2:
R′=ΔRR∪RΔRR' = \Delta RR\cup R\Delta RR′=Δ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+==RR^+==RR+==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)R0⊆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={ab∣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∑的nnn次幂
∑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∈∑∗,xxx叫做∑\sum∑上的一个句子。
6.句子的长度
∀x∈∑∗\forall x\in \sum^*∀x∈∑∗,句子xxx中字符出现的总个数叫做该句子的长度,记作∣x∣|x|∣x∣。
7.并置
x,y∈∑∗x,y\in\sum^*x,y∈∑∗,xxx,yyy的并置是由串xxx直接相接串yyy所组成的。记作xyxyxy。并置又叫做连结。
8.串x的n次幂
x0=εx^0=\varepsilonx0=ε
xn=xn−1xx^n = x^{n-1}xxn=xn−1x
9.前缀和后缀
设xxx,yyy,zzz,www,v∈∑∗v\in\sum^*v∈∑∗,且x=yzx=yzx=yz,w=yvw=yvw=yv
(1)yyy是xxx的前缀,若∣z∣≠0|z|\not = 0∣z∣=0,则称yyy为xxx的真前缀
(2)zzz是xxx的后缀,若∣y∣≠0|y|\not = 0∣y∣=0,则称zzz为xxx的真后缀
(3)yyy是xxx和www的公共前缀
(4)如果xxx和www的任何公共前缀都是yyy的前缀,则yyy是xxx和www的最大公共前缀
(5)如果x=zyx=zyx=zy,w=vyw=vyw=vy,则yyy是xxx和www的公共后缀
(6)如果xxx和www的任何公共后缀都是yyy的后缀,则yyy是xxx和www的最大公共后缀
10.子串
www,xxx,yyy,z∈∑∗z\in \sum^*z∈∑∗,且w=xyzw=xyzw=xyz,则称yyy是www的子串。
(1)ttt,uuu,vvv,www,xxx,yyy,z∈∑∗z\in\sum^*z∈∑∗,且t=uyvt=uyvt=uyv,w=xyzw=xyzw=xyz,则称yyy是ttt和www的公共子串。如果y1y_1y1,y2y_2y2,……,yny_nyn是ttt和www的公共子串,且有∣yj∣=max{∣y1∣,∣y2∣,…,∣yn∣}|y_j|=max\{|y_1|,|y_2|,…,|y_n|\}∣yj∣=max{∣y1∣,∣y2∣,…,∣yn∣},则称yjy_jyj是ttt和www的最大公共子串。
PS:两个串的最大公共子串不一定是唯一的。
11.语言
∀L⊆∑∗\forall L\subseteq \sum^*∀L⊆∑∗,LLL称为字母表∑\sum∑上的一个语言,∀x∈L\forall x\in L∀x∈L,xxx叫做LLL的一个句子。
12.语言的乘积
L1⊆∑1∗L_1\subseteq \sum_1^*L1⊆∑1∗,L2⊆∑2∗L_2\subseteq \sum_2^*L2⊆∑2∗,语言L1L_1L1与L2L_2L2的乘积是一个语言,该语言定义为:
L1L2={xy∣x∈L1,y∈L2}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上的语言。