道可道,非常道;名可名,非常名。
无名,天地之始,有名,万物之母。
故常无欲,以观其妙,常有欲,以观其徼。
此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

本笔记仅记录本人没学过的东西

基础知识

序列

序列指的是把对象按照一定的次序列举出来。可以是有限的,可以是无限的;可以由递归定义一个序列,也可以显式定义一个序列。

如果A⊆UA\subseteq U,对∀x∈A\forall x \in A,AA上的特征函数fAf_A定义为

fA(x)={1,x∈A0,x∈Af_A(x)=\begin{cases} 1,&x\in A\\ 0,&x\not\in A \end{cases}

有fA∩B=fA&fBf_{A\cap B}=f_A \& f_B(集合并等于特征函数位并),类似的可以列出其他位运算成立的式子。

如果一个集合是有限集,则其特征函数可以使用序列来表示(计算机表示)(离散化)。

串与正则表达式

已知集合AA,可以构造由AA中所有有限序列所组成的集合A∗A^*。AA被称为字母表,A∗A^*中的所有元素称作AA中的字或者字符串,用Λ\Lambda表示空字符串。

如果对于w1=s1s2⋯sn,w2=t1t2⋯tn.w1,w2∈A∗w_1=s_1s_2\cdots s_n,w_2=t_1t_2\cdots t_n.w_1,w_2\in A^*,定义w1w_1与w2w_2的连接为序列s1s2⋯snt1t2⋯tns_1s_2\cdots s_nt_1t_2\cdots t_n,记作w1⋅w2w_1\cdot w_2或w1w2w_1w_2。显然其也在A∗A^*中。

由以下规则递归构造({x∣x∈A}∧{(,),∧,∗,∨})∗(\{x|x\in A\}\land\{(,),\land,*,\lor\})^*的字符串,称其为AA上的正则表达式rere

RE1: 符号Λ是正则表达式。RE2: 如果x∈A,则x是正则表达式。RE3: 如果α和β是正则表达式,则αβ是正则表达式。RE4: 如果α和β是正则表达式,则α∨β是正则表达式。RE5: 如果α是正则表达式,则(α)∗是正则表达式。\begin{aligned} \text{RE1}:\space &符号\Lambda 是正则表达式。 \\ \text{RE2}:\space &如果x\in A,则x是正则表达式。 \\ \text{RE3}:\space &如果\alpha 和 \beta 是正则表达式,则\alpha\beta 是正则表达式。 \\ \text{RE4}:\space &如果\alpha 和 \beta 是正则表达式,则\alpha\lor\beta 是正则表达式。 \\ \text{RE5}:\space &如果\alpha 是正则表达式,则(\alpha)^*是正则表达式。 \end{aligned}

定义G(re)G(re)为按照以下规则递归构造出的字符串集合

1. G(Λ)={Λ}2. 如果x∈A,则G(x)={x}3. 如果α和β都是A上的正则表达式,则G(αβ)={s∈G(α),t∈G(β)∣st}4. 如果α和β都是A上的正则表达式,则G(α∨β)=G(α)∨G(β)5. 如果α是A上的正则表达式,则G((α)∗)=G(α)∗\begin{aligned} 1.\space &G(\Lambda)=\{\Lambda\} \\ 2.\space &如果x\in A,则G(x)=\{x\} \\ 3.\space &如果\alpha 和 \beta 都是A上的正则表达式,则G(\alpha\beta)=\{s\in G(\alpha),t\in G(\beta)|st\} \\ 4.\space &如果\alpha 和 \beta 都是A上的正则表达式,则G(\alpha \lor \beta)=G(\alpha)\lor G(\beta) \\ 5.\space &如果\alpha是A上的正则表达式,则G((\alpha)^*)=G(\alpha)^* \end{aligned}

正则表达式的匹配就是判断一个字符串是否在其GG函数表示的集合内。

数学结构

我们称对于某个集合,定义了其元素的一些运算。集合和这些运算构成了一个数学结构,用(集合,+,−)(集合,+,-)来表示,比如(R,+,−,∗,/)(R,+,-,*,/)。

只有一个操作数的运算是一元运算,结合两个操作数的运算是二元运算。

如果一个数学结构里运算的结果仍然在集合中,我们称这个结构关于这个运算是封闭的。

对于一个集合AA上的一个二元运算⊙\odot

我们称其是可交换的当且仅当∀x,y∈A ,A⊙B=B⊙A\forall x,y\in A\space ,A\odot B=B\odot A

我们称其是可结合的当且仅当∀x,y,c∈A ,(A⊙B)⊙C=A⊙(B⊙C)\forall x,y,c\in A\space ,(A\odot B)\odot C=A\odot (B\odot C)

左结合性指同等优先级的表达式在不加括号的情况下,从左至右执行。+,−,∗,/+,-,*,/都是左接合的。

对于一个集合AA上的两个二元运算⊙\odot和⊕\oplus,我们称⊙\odot对⊕\oplus可分配当且仅当∀x,y,c∈A ,A⊙(B⊕C)=(A⊙B)⊕(A⊙C)\forall x,y,c\in A\space ,A\odot (B\oplus C)=(A\odot B)\oplus (A\odot C)。

如果对于一个二元运算⊙\odot,∃e,∀x∈A,x⊙e=e⊙x=e\exist e,\forall x \in A,x\odot e=e\odot x=e。我们称ee是⊙\odot的一个单位元。一个二元运算的单位元一定唯一。

如果一个二元运算⊙\odot存在单位元ee,如果x,y∈A,x⊙y=y⊙x=ex,y \in A,x\odot y=y\odot x=e。我们称yy是xx的逆。

逻辑

命题是或者为真或者为假而不是两者同时成立的一条陈述语句。

命题变量出现在命题中,能以命题命题代替。命题或命题变量能通过逻辑联结词接合获得复合命题。

在自然语言中,a或b有两种意思。一种是a和b只能有一个为真,一种是a和b有一个为真。逻辑中或只有后者的意思,所以需要结合语境来转换自然语言描述的命题。

如果pp和qq是命题,pp和qq的析取是复合命题”pp或qq“,用p∨qp\lor q来表示。折取用p∧qp\land q来表示。

定义命题函数为从定义域里的元素产生命题的函数P(x)\text P(x),也叫谓词。

P(x)\text P(x)的全称量化是命题"对于所有xx的值,P(x)\text P(x)为真",用∀x P(x)\forall x\space\text P(x)表示,∀\forall称为全称量词。

P(x)\text P(x)的存在量化是命题"存在一个xx,P(x)\text P(x)为真",用∃x P(x)\exist x\space\text P(x)表示,∃\exist称为存在量词。

如果pp和qq是命题,那么复合命题“如果pp,那么qq”称为条件命题或蕴含,用p⇒qp\Rightarrow q表示,pp称为前项或假设,qq称为后项或结论。蕴含关系的真值表如下

pp qq p⇒qp\Rightarrow q
T T T
T F F
F T T
F F T

相比自然语言,逻辑中蕴含用在更弱的意义下。

命题变量所有的可能值都为真的命题称为重言式。总是为假的命题称为矛盾或者谬论;命题的真假依赖于命题变量的真值,这种命题称为不定式。

若p⇔qp\Leftrightarrow q是重言式,可以说pp和qq是逻辑等价的,或者简称等价。

证明方法

如果p⇒qp\Rightarrow q是一个重言式,那么称从pp逻辑上得到q,这里pp和qq可以是包含许多命题变量的复合命题,如(p1∧p2∧⋯∧pn)⇒q(p_1\land p_2\land \cdots \land p_n)\Rightarrow q是重言式,此时称从p1∧p2∧⋯∧pnp_1\land p_2\land \cdots \land p_n逻辑上得到qq,记为

p1p2⋮pn∴q‾p_1 \\ p_2 \\ \vdots \\ p_n \\ \overline{\therefore q}

pip_i称为假设或前提,qq称为结论。基于重言式的论证称为推理规则。以下是一些重要的推理规则。

pp⇒q∴q‾p \\ p\Rightarrow q\\ \overline{\therefore q}

此为假言推理

p(∼q)⇒(∼p)∴q‾p \\ (\sim q)\Rightarrow(\sim p) \\ \overline{\therefore q}

此为间接方法

p⇒q∼q∴ ∼p‾p\Rightarrow q \\ \sim q \\ \overline{\therefore\space \sim p}

此为反证法

数学归纳法

想证明∀n≥n0 P(n)\forall n\ge n_0\space P(n),其中nn为整数,只需证明P(n0)∧(∀m≥n, P(m)⇒P(m+1))P(n_0)\land (\forall m\ge n,\space \text P(m)\Rightarrow\text P(m+1))为真即可。可写出以下步骤。

基础步骤 .......归纳步骤 .......由数学归纳法得到,P(n)对于所有的n≥1为真。\begin{aligned} &\qquad\bold{基础步骤}\space .......\\ &\qquad \bold{归纳步骤}\space ....... \\ &由数学归纳法得到,\text P(n)对于所有的n\ge 1为真。 \end{aligned}

强形式的数学归纳法或强归纳法是证明P(n0)∧P(n0+1)∧P(n0+2)∧⋯∧P(k)⇒P(k+1)\def \P {\text{P}} \P(n_0)\land \P(n_0+1)\land \P(n_0+2)\land \cdots\land \P(k)\Rightarrow \P(k+1)是一个重言式。基本步骤和前面一样。

强归纳和归纳法等价

计数

如果递归关系具有以下形式

an=∑i=1krkan−ka_n=\sum_{i=1}^k r_ka_{n-k}

其中rir_i为常数,称其是k\bold{k}阶线性其次关系。其有特征方程xk=∑i=0kr1xk−1x^k=\sum_{i=0}^kr_1x^{k-1}。对于2阶线性其次递归关系,其特征方程的根和递归关系的显式公式如下

有两个根s1,s2时,an=usn+vs2n有一个根s时,an=usn+vnsn\begin{aligned} 有两个根s_1,s_2时,&a_n=us^n+vs_2^n\\ 有一个根s时,&a_n=us^n+vns^n \end{aligned}

关系和有向图

关系

定义集合上的笛卡尔积A1×A2×⋯×An={(a1,a2,⋯ ,an)∣ai∈Ai,i=1,2,⋯ ,m}A_1\times A_2\times\cdots\times A_n =\{(a_1,a_2,\cdots,a_n)|a_i\in A_i,i=1,2,\cdots,m\}

右式表达的元素称为有序m-元。

一个物件有nn个属性,属性的值就构成了这个属性的集合AiA_i。

一个关系型数据库DD是A1×A2×⋯×AnA_1\times A_2\times\cdots\times A_n的一个子集,其中每个AiA_i标识一个数据的属性,一个属性称为一个关键字。

设A,BA,B为非空集合,从A到B的一个关系RA\bold{到}B\bold{的一个关系}R是A×BA\times B的一个子集。如果R⊆A×BR\subseteq A\times B且(a,b)∈R(a,b)\in R,我们称a与b是R相关的a\bold与b\bold是R\bold{相关的},记为a R ba\ R\ b,如果不是,则记为a R ba\ \not R\ b,通常A=BA=B,则往往称R是A上的一种关系R\bold是A上\bold{的一种关系}。

比如集合{1,2,3}到集合{4,5,6}的一个关系R={{2,4},(3,6)}

RR的定义域用Dom(R)\text{Dom}(R)表示,Dom(R)∈A\text{Dom}(R)\in A。RR的值域用Ran(R)\text{Ran}(R)表示,Ran(R)∈B\text{Ran}(R)\in B。

如x∈Ax\in A,记R(x)={y∈B∣x R y}R(x)=\{y\in B| x\ R\ y\}

如A1⊆AA_1\subseteq A记R(x)={y∈B∣∃x∈A1,x R y}R(x)=\{y\in B| \exist x\in A_1,x\ R\ y\}

如A={a1,⋯ ,an},B={b1,⋯ ,bn}A=\{a_1,\cdots,a_n\},B=\{b_1,\cdots,b_n\},RR是从AA到BB的一个关系,定义RR的矩阵MR=[mij],mi,j={1,(ai,bj)∈R0,OthersM_R=[m_{ij}],m_{i,j}=\begin{cases}1,\quad(a_i,b_j)\in R\\0,\quad Others \end{cases}。

如果AA是个有限集,RR是AA上的关系。可将AA的元素看成点,每个x∈Rx\in R看成单向边,构成了一个有向图,称为RR的有向图。

定义x Rn yx\ R^n\ y指存在a1,⋯ ,an−1a_1,\cdots,a_{n-1}使得nn个关系x R a1,a1 R a2,⋯ ,an−1 R yx\ R\ a_1,a_1\ R\ a_2,\cdots,a_{n-1}\ R\ y成立。(路径)

RkR^k也是一个关系

定义x R∞ yx\ R^\infty\ y指存在kk,使得x Rk yx\ R^k\ y成立。(连通)

有MR2=MR⊙MRM_{R^2}=M_R\odot M_R(布尔积)

关系的性质

称关系RR是自反的,当且仅当∀a∈A,有a R a\forall a\in A,有a\ R\ a。

称关系RR是非自反的,当且仅当∀a∈A,有a R a\forall a\in A,有a\ \not R\ a。

称关系RR是对称的,当且仅当∀a R b则b R a\forall a\ R\ b则b\ R\ a。(无向)

称关系RR是非对称的,当且仅当∀a R b则b R a\forall a\ R\ b则b\ \not R\ a。(单向,无自环)

称关系RR是反对称的,当且仅当如∀a R b∧b R a\forall a\ R\ b\land b\ R\ a则a=ba=b。(单向,不care自环有无)

称关系RR是传递的,当且仅当∀a R b∧b R c\forall a\ R\ b\land b\ R\ c则a R ca\ R\ c。

等价关系

如果RR是自反的、对称的和传递的,称其是一个等价关系。

等价关系的有向图是一个包含有几个完全图的图

关系运算

下文中所有关系均设为集合AA上。

关系是集合,可以用集合运算。

a R−1 ba\ R^{-1}\ b当且仅当b R ab\ R\ a。(逆)

有以下关系运算后自反性质的定理

  • 如RR自反,则R−1R^{-1}自反
  • 如RR和SS自反,则R∩SR\cap S和R∪SR\cup S是自反
  • RR自反当且仅当R‾\overline R是非自反(补集)

有以下关系运算后对称性质的定理

  • RR是对称的当且仅当R=R−1R=R^{-1}
  • RR是反对称的当且仅当R∩R−1⊆ΛR\cap R^{-1}\subseteq \Lambda(Λ={a∈A∣(a,a)}\Lambda=\{a\in A|(a,a)\})
  • RR是非对称的当且仅当R∩R−1=∅R\cap R^{-1}=\emptyset

有以下关系运算后的定理

  • (R∩S)2⊆R2∩S2(R\cap S)^2\subseteq R^2\cap S^2
  • 如RR和SS都是传递的,则R∩SR\cap S是传递的
  • 如RR和SS都是等价的,则R∩SR\cap S是等价的
闭包

我们希望从集合上的一个关系RR出发,向RR添加一些对,使其满足某些性质。如果存在最小关系R1R_1,称其是关于该性质的RR的闭包。

RR的自反闭包是R∪ΛR\cup \Lambda;RR的对称闭包是R∪R−1R\cup R^{-1};RR的传递闭包是R∞R^\infty。

如果RR是AA到BB的关系,SS是BB到CC的关系,称RR和SS的合成为{(a,b)∈R,(b,c)∈S∣(a,c)}\{(a,b)\in R,(b,c)\in S|(a,c)\},记为S∘RS\circ R。

有MS∘R=MR⊙MSM_{S\circ R}=M_R \odot M_S

有R∞=⋃n=1∞RnR^\infty=\bigcup_{n=1}^\infty R^n,如果∣A∣=n|A|=n,退化为R∞=⋃i=1nRiR^\infty=\bigcup_{i=1}^n R^i。

Floyd−WarshallFloyd-Warshall算法如下

设RR是集合A=a1,a2,⋯ ,an集合A={a_1,a_2,\cdots,a_n}上的一个关系,如果x1,x2,⋯ ,xmx_1,x_2,\cdots,x_m是RR中的一条道路,除了x1⋯xmx_1\cdots x_m以外的任何顶点都称作道路的内顶点。定义布尔矩阵WkW_k如下,Wk[i,j]W_k[i,j]为11当且仅当RR中存在aia_i到aja_j的一条道路,它的内顶点构成的集合是{a1,⋯ ,ak}\{a_1,\cdots,a_k\}的子集。

不妨设W0=MRW_0=M_R,有Wn=MR∞W_n=M_{R^\infty}。

利用动态规划的思想,得到

Wk[i,j]={1,Wk−1[i,j]=1 ∨(Wk−1[i,k]=1∧Wk−1[k,j]=1)0,othersW_{k}[i,j]= \begin{cases} 1,\quad W_{k-1}[i,j]=1\ \lor (W_{k-1}[i,k]=1\land W_{k-1}[k,j]=1) \\ 0,\quad others\\ \end{cases}

时间复杂度O(n3)O(n^3)。

序关系和序结构

如果某个集合AA上的关系RR是自反的、反对称的和传递的,称RR是一个偏序。集合AA与偏序RR一起称作偏序集(A,R)(A,R)。(DAG)

(A,R−1)(A,R^{-1})是(A,R)(A,R)的对偶,R−1R^{-1}是RR的对偶。

如果a R b∨b R aa\ R\ b\lor b\ R\ a成立称a,ba,b可比。如果∀a,b∈A a,b\forall a,b \in A\ a,b可比成立,称AA是一个全序,也称AA是一个链。(此处应有std::sort)

如果(A,≤)(A,\le)和(B,≤)(B,\le)是偏序集,则(A×B,≤)(A\times B,\le)是偏序集,如果(a,b)≤(a′,b′)(a,b)\le (a',b'),当且仅当a≤a′∧b≤b′a\le a'\land b\le b'。称笛卡尔积上的这种偏序为积偏序。

如果(A,≤)(A,\le)和(B,≤)(B,\le)是偏序集,则(A×B,≺)(A\times B,\prec)是偏序集,如果(a,b)≺(a′,b′)(a,b)\prec (a',b'),当且仅当a<a′∨(a=a′∧b<b)′a<a' \lor (a=a'\land b< b)'。称笛卡尔积上的这种偏序为字典序。
(std::pair,std::tuple,std::string,std::array)

哈塞图是一种表示偏序集的特殊无向图。其表示了一个每条边的方向都是从下往上,忽略了自环的和路径长度大于1的有向图。这个有向图就是偏序集关于这个关系的有向图。

拓扑排序就是DAG的一个可能的搜索路径。

设(A,R)(A,R)和(A′,R′)(A',R')是偏序集,如果存在一个双射f: A→A′f:\ A\rightarrow A',使得∀a,b∈A ,a R b⇔f(a) R′ f(b)\forall a ,b\in A\ ,a\ R\ b\Leftrightarrow f(a)\ R'\ f(b),则称函数ff是从(A,R)(A,R)到(A′,R′)(A',R')的一个同构,称(A,R)(A,R)和(A′,R′)(A',R')是同构的偏序集。

极小元指的是哈塞图中的所有DAG起点,极大元指的是哈塞图中所有DAG终点。最大元aa满足∀x∈A,x R a\forall x\in A,x\ R\ a成立,最小元aa满足∀x∈A,x R−1 a\forall x\in A,x\ R^{-1}\ a成立。

B⊂AB\subset A的上界LUB(B)\text{LUB}(B)指的是BB集合的所有公共祖先,下界GLB(B)\text{GLB}(B)指的是BB集合的所有公共孩子。最小上界是唯一的最小公共祖先,最小下界是唯一的最大公共孩子。(草)

格

格是A的一个子集A′A',满足∀a,b∈A′ ,∃LUB({a,b}),∃GLB({a,b})\forall a,b\in A'\ ,\exist \text{LUB}(\{a,b\}),\exist \text{GLB}(\{a,b\})。