考研复试专业课笔记

编译技术

概述

:从头到尾扫描一次。

前端:与源语言有关。后端:与目标机有关。

文法和语言

  • 文法G[Z]=(Vn,Vt,P,Z)

    • Vn:非终结符号集

    • Vt:终结符号集

    • P:产生式或规则的集合

    • Z:开始符号(识别符号) Z∈Vn

  • 规范推导=最右推导

  • 最右推导:若规则右端符号串中有两个以上的非终结符时,先推右边的。

  • 最左推导:若规则右端符号串中有两个以上的非终结符时,先推左边的。

  • 语言:文法G[Z]所产生的所有句子的集合。

  • 递归文法

  • 短语:前面句型中的某个非终结符所能推出的符号串。

  • 简单短语:一次推出的短语。

  • 句柄:任一句型的最左简单短语。

  • 语法树、子树

  • 规约推导规范归约(对句型中句柄进行的归约)、规范推导

  • 二义性文法:存在两棵不同的语法树。

  • 文法的实用限制

    • 有害规则:如U::=U
    • 多余规则
      • 不可达符号
      • 不活动符号:规则中含有推不出任何终结符号串的非终结符
  • BNF表示:< , >, ::=, | , { , } , [ , ] , ( , )

词法分析

  • 状态图
  • 词法分析程序

语法分析

根据文法规则,从源程序单词符号串中识别出语法成分,并进行语法检查。

自顶向下分析

  • 存在问题及解决
    • 左递归文法:消除直接左递归(使用扩充的BNF表示或改为右递归)
    • 回溯问题:改写文法,超前扫描
  • 递归子程序法

符号表

  • 符号表的结构与内容
  • 符号表的组织方式
  • 非分程序结构语言的符号表组织:全局符号表、局部符号表
  • 分程序结构语言的符号表组织:栈式符号表

存储组织及管理

  • 静态存储分配

  • 动态存储分配:栈式动态存储分配

  • 活动记录

    • 局部数据区:局部变量
    • 参数区:存放隐式参数和显式参数
    • display区:存放各外层模块活动记录的基地址

源程序的中间形式

  • 波兰表示:前缀表达、后缀表达(逆波兰)
  • N元表示
    • 三元式:操作符 左操作数 右操作数
    • 四元式:操作符 操作数1 操作数2 结果
  • 图结构表示
    • 抽象语法树
    • DAG图(Directed Acyclic Graphs 有向无环图)
  • 静态单赋值形式(SSA):每个变量只赋值一次

错误处理

  • 分类
    • 语法错误:源程序在语法上不合乎文法
    • 语义错误:程序不符合语义规则、超越具体计算机系统的限制
  • 错误处理
    • 错误改正
    • 错误局部化处理

语法制导翻译技术

  • 翻译文法和语法制导翻译
    • 输入文法:未插入动作符号时的文法。产生输入序列。
    • 翻译文法(TG):插入动作符号的文法。产生活动序列
    • 语法导制翻译:按翻译文法进行的翻译。
  • 属性翻译文法(ATG)
    • 翻译文法中的符号,包括终结符、非终结符和动作符号均可带有属性
    • 综合属性:自底向上,自右向左,用↑表示
    • 继承属性:自顶向下,自左向右,用↓表示
  • L-属性翻译文法(L-ATG):输入文法要求是LL(1)文法

语义分析和代码生成

  • 声明的处理
  • 表达式的处理
  • 赋值语句的处理
  • 控制语句的处理
  • 过程调用和返回

词法分析自动化

  • 确定的有穷自动机(DFA)— 状态图的形式化

  • 不确定的有穷自动机(NFA):从同一状态出发,有以同一字符标记的多条边,或者有以ε标记的特殊边的自动机。

  • NFA的确定化

    • 集合I的ε-闭包(ε-closure):从s出发经过任意条ε弧能够到达的任何状态。
    • Ia=ε-closure(J),J是从状态子集I中的每个状态出发,经过标记为a的弧而达到的状态集合。
    • 状态转换矩阵
  • DFA的简化(最小化)

    • 消除多余状态
    • 合并等价状态

语法分析提高

  • LL分析法:自左向右扫描、自左向右地分析和匹配输入串。

  • FIRST(α):α的头符号集合。

  • FOLLOW(A):A的后继符号集合。

  • LL(1)文法:一个文法G,其分析表M不含多重定义入口

  • 自底向上分析

    • 移进—归约分析:建立符号栈,用来记录分析的历史和现状,并根据所面临的状态,确定下一步动作是移进还是归约
    • 算符优先分析:当栈顶项(或次栈顶项)终结符的优先级大于栈外的终结符的优先级,则进行归约,否则移进。

代码优化

  • 局部优化技术
    • 基本块:连续语句,第一条进,最后一条出
    • 流图:有向图,节点是基本块
    • 优化方法
      • 代数变换
      • 常数合并和传播
      • 删除冗余代码
      • 消除公共子表达式(DAG图
  • 全局优化技术
    • 数据流分析:out[S] = gen[S] ∪ (in[S] – kill[S])
      • out[S]代表在S末尾得到的数据流信息
      • gen[S]代表S本身产生的数据流信息
      • in[S]代表进入S时的数据流信息
      • kill[S]代表S注销的数据流信息
    • 到达定义分析
    • 活跃变量分析
    • 寄存器:冲突图,图着色算法
    • 循环优化

离散数学(一)

逻辑域:逻辑真值集合、逻辑运算集合、关系集合。

合式公式

真值赋值函数:从合式公式到逻辑集合{0,1}的函数,记为σ。

  • 有效式(永真式、重言式):每个真值赋值σ使得σ(Q)=1。
  • 永假式(不可满足式):每个都不为1
  • 可满足式:至少有一个

简单析取式:Q1∨…∨Qn

简单合取式:Q1∧…∧Qn

析取范式:简单合取式的析取

合取范式:简单析取式的合取

极大项:Q1 ∨…∨Qn,其中Qi是pi或-pi(包含每一个变元)

极小项:Q1∧…∧Qn,其中Qi是pi或-pi(包含每一个变元)

主析取范式:R1∨…∨Rm,其中R1,……,Rm是极小项

主合取范式:R1∧…∧Rm,其中R1,……,Rm是极大项

主析取范式和主合取范式统称为主范式


完全集:S是联结词集合,使得每个n(n>0)元的联结词都可由S定义。如{非、与、或}。

如果从完全集S中去掉任何一个联结词就成为不完全的了,就称S为极小完全集


原子命题(简单命题):具有确定真或假含义的陈述句。

谓词:表示客体的性质,或表示客体之间的关系的词。Q(x, y)

函数与谓词的区别在于:对于一元函数f,f (x)是论域中的元素;对于一元谓词 P, P(x) 是 0 或 1。

命题:谓词、量词

论域:包括对象集合、运算集合、关系集合。


逻辑符号:包括变元、联接词、量词(∀, ∃)、逗号以及括号等。

非逻辑符号:包括常元、函词\(f_1^n\),右上角的n表示n元函词)、谓词\(P_1^n\))等。

:常元、变元、函词组成。

合式公式:项、谓词、联接词、量词等组成。

前束范式:δk为∀,∃量词,δ1x1…δnxnQ的公式称为前束范式


公理系统的组成: - 语言集 - 公理集:公理是用于表达推理由之出发的初始肯定命题 - 推理规则集:推理规则是由公理及已证定理得出新定理的规则 - 定理集:表达了肯定的所有命题。

命题逻辑公理系统

谓词逻辑公理系统


可靠性定理:若\(\Gamma \vdash \alpha\),则\(\Gamma \vDash \alpha\)。(如果语法上是有效的,则语义(真值)上是有效的)

完备性定理:若\(\Gamma \vDash \alpha\),则\(\Gamma \vdash \alpha\)。(如果语义上是有效的,那么可以找到一个证明)

三段论:Q, Q→R ⊢ R

离散数学(二)

集合论

集合相等、子集、真子集、空集

幂集:集合A的全部子集构成的集合,记作P(A)。

基数:有穷集合A中所含有元素的个数,记作#A,或|A|、n(A)。

势(基数):衡量集合的大小。

若存在一个从A到B上的一一映射则AB的相同。

可数集:元素可以一一列出(是无限集,如自然数)

集合的运算

  • 交、并、差、补

  • 对称差集:A⊕B =(A-B)∪(B-A)=(A∪B)-(A∩B)

对偶原理:(不含 - 和⊕)将∪和∩互换,Ø和全集互换,仍成立。

集类:如果一个集合的所有元素都是集合,则称该集合为集类。

广义并:集类的所有元素的所有元素。∪B ={x| ∃ X (X∈B ∧ x∈X)}

广义交:集类的所有元素共有的元素。∩B ={x| ∀X (X∈B → x∈X)} , B≠Ø

字母表、字符串、语言、闭包、正闭包

有序偶:< x,y >。可表示为:<x,y>={{x}, {x, y}}

n元序偶:<x1, x2, …, xn>= < <x1, x2, …, xn-1>, xn>

笛卡尔乘积:A×B = {<x, y>| x∈A ∧ y∈B }。不满足交换律、结合律。

关系

关系:R⊆A1×A2×...×An,称R为A1, A2, …, An间的n元关系。

关系的相等:都是n元,每个集合相等,关系用序偶的集合形式表示相等。

关系图:一个<x,y>用一条有向边表示。

关系矩阵:xi与yj有关系R,则矩阵i行j列为1。

关系的性质

  • 自反:顶点都有自环
  • 反自反:顶点都无自环
  • 对称:两个点要么无边,要么有方向相反的两条边
  • 反对称:两个顶点之间至多一条边!
  • 传递:x到y有路径,则必有x到y的边

关系的运算(记住关系本质上是序偶的集合)

  • 交、并、差、补、异或

  • 求逆:偶序的第一元和第二元对换;每条边反向;矩阵转置。保持关系的五条性质。

  • 合成:复合,R ◦ S ={<x, z>|∃y∈Y 使得x R y ∧ y S z) }。矩阵表示类似矩阵乘法。

  • 次幂\(R^0=恒等关系I_A\)\(R^{n+1}=R^n◦R\)

  • 闭包


偏序关系:集合 A上的关系R是自反的、反对称的、传递的。用\(\le\)表示任意偏序关系,并用\(<A ,\le>\)表示偏序结构

全序关系:偏序\(<A ,\le>\)对于任意 x, y ∈ A,要么x ≤ y,要么y ≤ x,即 x与y可比。则\(\le\)为A上的全序,并称\(<A ,\le>\)全序结构

严格偏序关系(拟序关系):R是反自反的、传递的(满足这两条就必然反对称)。\(<A ,<>\)为严格偏序(拟序)结构。

覆盖:x<y 且不存在z使得 x<z 和 z<y,则y是x的覆盖。

哈斯图(偏序结构图)

  • 如果 x<y ,则点 x 画在点 y 之下
  • 如果 y 覆盖 x ,则 x 和 y 之间存在一条无向边

最大元最小元极大元极小元上界下界最小上界最大下界

{1,2,3,6,12,24,36 } 整除关系的哈斯图,S是红色部分:

良序结构:偏序结构<A , ≤ >,A 的每一个非空子集都有一个最小元。良序必全序。


相容关系:自反、对称。

等价关系:自反、对称、传递。

等价关系的矩阵可以通过行列变换化为如下形式:

等价类:A中与x有关系R的元素的集合称为x关于R的等价类,简称x的等价类,记作\([x]_R\)

商集:等价类的集合,\(\{[x]_R|x\in A\}\)为A关于R的商集,记为A/R。A/R的元素个数称为秩。

划分:划分Π的每个元素非空,并集为A,任意两个交为空。如A={a,b,c},B={{a}, {b,c}}就是一个划分。

一个等价关系确定一个划分,一个划分确定一个等价关系。

函数

函数:特殊的二元关系,不能一对多。

部分函数:按正常理解的函数,部分有定义dom(f)⊆X。

  • 全函数(简称函数):dom(f)=X
  • 严格部分函数:dom(f)⊂X

限制(缩小dom)、延拓(扩大dom)、原像

函数的复合\(f:X\to Y,g:Y\to Z\),记作\(g ◦ f\)(习惯上)。

满射(ran=Y)、单射双射(满射+单射,一一对应)

左逆\(g ◦ f = I_X\),当且仅当f是单射

右逆\(f ◦ g= I_X\),当且仅当f是满射

\(g\)既是左逆,又是右逆。f是双射

特征函数\(\Psi_A(x)\),x属于A返回1,不属于返回0。

图论

无向图:G=〈V,E,Ψ〉。e, ∈ E 且 v1, v2 ∈ V,Ψ(e) ={v1,v2}。

有向图:G=〈V,E,Ψ〉。e ∈E 且 v1, v2 ∈V,Ψ(e) =〈v1,v2〉。

  • d 度正则图:所有结点的度均为自然数 d 的无向图
  • 完全无向图:度都为n-1
  • 完全有向图:入度和出度都为n-1

子图真子图

生成子图:V同,E和Ψ是原图的子集。

导出子图:V'是V的子集,以 V′ 为节点集合的最大子图,记作G[ V′ ]。

路径:v0 e1 v1 e2 … vn-1 en vn

  • 长度:n
  • 闭路径:v0= vn
  • 简单路径:边互不相同
  • 基本路径:点互不相同(去掉闭路径得基本路径)

可达:R (v) 表示从 v 可达的全体结点的集合。

距离:记作d (v1, v2)。图的直径定义为最远的两个点的距离。

加权图:〈G,W〉,W(e) 为边 e 的加权长度

连通

  • 无向图
  • 有向图
    • 基础图:将有向边改为无向边
    • 强连通:任意两个点互相可达
    • 单向连通:任意两个点,一个可达另一个
    • 弱连通:基础图连通

极大子图

  • 分支:无向图G的极大连通子图

  • 有向图:强分支、单向分支、弱分支

半路径:基础图中的路径,同向为正向边,反向为反向边。

回路:连通2度正则图

  • 半回路:基础图是回路
  • 有向回路:入度出度均为1

非循环图:没有回路的图

子图G'的每个结点的入度(出度)都大于零,则有有向回路。


欧拉路径:包含所有边的简单开路径。

欧拉闭路(回路):包含所有边的简单闭路径。

欧拉图:每个结点都是偶结点的无向图。

欧拉有向图:每个结点的出度和入度都相等的有向图。

欧拉定理:G是欧拉图(欧拉有向图)\(\Leftrightarrow\)G有欧拉闭路。

G有欧拉路径\(\Leftrightarrow\)G有两个奇结点。


哈密顿路径:包含所有结点的基本路径。

哈密顿回路

哈密顿图:有哈密顿回路的图。

必要条件(哈密顿回路一定满足):W(G-V1)≤|V1|,W表示连通分支数,V1表示要减去的点集。


邻接矩阵:xij表示以 vi和 vj 为起点和终点边的数目。

路径矩阵(可达性矩阵):pij=1表示vi到vj可达。


:连通、非循环、n-1条边(任意2证1)

森林:每个分支都是树的无向图。

生成树:树T是无向图G的生成子图。

最小生成树:所有生成树中加权长度最小者。

有向树:根指向叶。

最优二叉树:叶加权路径长度最小的(每层的值乘以层数相加)

数据库

基本概念

数据模型

  • 概念模型:实体—联系方法(E-R)法
    • 实体
    • 属性
    • 码:唯一标识实体的属性集
    • 域:属性的取值范围
    • 联系
  • 数据模型
    • 数据结构
    • 数据操作
    • 数据的约束条件

数据库系统三级模式结构

  • 模型:不涉及物理存储细节,与具体的应用、编程语言无关;具体定义数据的逻辑结构。
  • 外模式:应用相关
  • 内模式:物理相关
  • 两级映象:逻辑独立性、物理独立性

关系数据库

:D1 , D2 ,…, Dn

笛卡尔积(D1×D2×…×Dn)的每个元素((d1 , d2 , … , dn))叫元组

关系:笛卡尔积的子集

语义约束

  • 实体完整性:要有属性或属性组合作为主码,主码值不可为空或部分为空
  • 参照完整性:关系R的外部码Fk与关系S的主码Pk相对应(或Pk为空)

关系代数

  • 并、差、交、广义笛卡尔积
  • 选取或限制:选择满足给定条件的元组
  • 投影:取若干属性列并删去重复行
  • 连接:从两个关系的广义笛卡儿积R×S中选取给定属性(X和Y)间满足比较条件的元组
  • 自然连接:从两个关系的广义笛卡儿积R×S中选取在相同属性列上取值相等的元组,并去掉重复的属性列
  • 除法

元组演算

域关系演算

数据库数据语言:DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)

关系数据库标准语言SQL

数据库保护

  • 用户标识与鉴别

  • 存取控制

    • 自主存取控制:角色与用户组
    • 强制存取控制:对比主体的Label和客体的Label
  • 其它方法:视图、审计、数据加密

数据完整性:实体完整性(主键),参照完整性(外键),用户自定义完整性

设计理论

数据依赖:一个关系内部属性值之间相互依赖又相互制约的关系。

  • 函数依赖:对于X的每个具体值,Y有唯一的值与之对应。记作:X→Y。
    • 完全函数依赖:如果X→Y,且对于任意X的真子集X ' ,都有X ' 不能→Y,则称Y对X完全函数依赖。
    • 部分函数依赖:非完全函数依赖
    • 传递函数依赖:如果X→Y,Y → Z,且Y 不能→ X,则称Z对X传递函数依赖。
    • Armstrong公理系统:自反律、增广律、传递律
    • 属性集X关于函数依赖集F的闭包:能由F根据Armstrong公理导出的属性
    • 最小依赖集
  • 多值依赖:给定一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关,记作:X →→ Y。

范式

  • 1NF:只包含原子值,不能“表中有表”。
  • 2NF:每个非主属性完全依赖于码。
    • 从1NF中消除非主属性对码的部分函数依赖可得。
    • 允许主属性部分函数依赖于码。
  • 3NF:每个非主属性都不传递依赖于R的任何码。
    • 2NF消除传递函数依赖。
    • 没有限制主属性对码的部分与传递函数依赖。
  • BCNF:如果对于R的每个函数依赖X→Y,且Y不是X的子集时,X必含有码
  • 4NF:只存在函数依赖或平凡的多值依赖。

候选码求解:L类(左部的属性)、R类(右部的属性)、N类(均未出现的属性)、LR类

存储管理与索引

B树:限制了每个节点放置关键字与指针的最小和最大个数;所有的叶节点都在同一层上。

B+树:把树中所有关键字都按递增次序从左到右安排在叶节点上,并且链接起来。

事务处理技术

ACID特性

  • 原子性:作要么都做,要么都不做
  • 一致性:从一个一致性状态变到另一个一致性的状态
  • 隔离性:并发执行的各个事务之间不能互相干扰
  • 持久性:一旦提交之后,它对数据库的影响必须是永久的

事务故障的恢复:UNDO

系统故障:UNDO+REDO

数据不一致性

  • 丢失更新:两个事务T1和T2读入同一数据并修改, T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
  • 脏读:T2读了T1未提交的数据,T1之后回滚了。
  • 不可重复读:事务T1读取数据后,事务T2执行更新(修改、插入、删除)操作,使T1无法再现前一次读取的结果。

并发控制(封锁)

  • 排它锁(X锁):事务T对数据对象R加上X锁,则只允许T读取和修改R,其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁。
  • 共享锁(S锁):事务T对数据对象R加上S锁,则事务T可以读取但不能修改R,其它事务只能对R加S锁,而不能对R加X锁,直到T释放R上的S锁。

意向锁:是该结点的下层结点正在被加锁。

可串行化:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行它们时的结果相同。

算法

渐近分析

  • 渐近紧确界\(\Theta(g(n)),c_1g(n)\le\Theta(g(n))\le c_2g(n)\)
  • 渐近上界\(O(g(n))\)
  • 渐近下界\(\Omega(g(n))\)

主定理法

排序

分治

  • 归并排序、逆序对
  • 最大子数组:找左边的最大、右边的最大、横跨左右的最大
  • 快速排序、次序选择(找第k小的元素)

动态规划

  • 01背包:背包容量为c时是否要拿第i件物品(P[i,c]),如果不拿继承i-1容量为c的(P[i-1,c]),如果拿要减去当前物品的重量(P[i-1,c-v[i]]+p[i])。

  • 最大子数组:D[i]表示以第i个元素结尾的最大子数组,\(D[i]=max\{X[i]+D[i-1],X[i]\}\)

  • 最长公共子序列:C[i,j]表示X[1...i]和Y[1...j]的最长公共子序列长度.

  • 最长公共子串

  • 编辑距离

  • 钢条切割问题:rec[j]记录长度为j钢条的最优切割方案。

贪心

  • 哈夫曼编码
  • 会场出租:最早结束活动优先(带权的话动规)

图论

  • 深搜广搜

  • 拓扑排序:不断删除入度为0的点;顶点完成时刻的逆序

  • 强连通分量:把边反向,得到反向图\(G^R\);在\(G^R\)上执行DFS,得到顶点完成时刻顺序L;在G上按L逆序执行DFS,得到强连通分量。

  • 最小生成树

    • Prim:任选一个起点,不断添加最短的边到已连通的集合中,用新加入的点去更新。
    • Kruskal:边先排序,从最小的开始选。
  • 最短路径

    • Dijkstra:每次找离源点最近的未选定的点,看能松弛哪些边。
    • Bellman-Ford:对所有的边进行n-1轮松弛操作,如果还能松弛则有负环。
    • Floyd
  • 最大二分匹配:寻找增广路径。


考研复试专业课笔记
https://shuusui.site/blog/2024/03/31/fushi/
作者
Shuusui
发布于
2024年3月31日
更新于
2024年3月31日
许可协议