集合运算

自己动手开发编译器(四)利用DFA转换表建立扫描器

回眸只為那壹抹淺笑 提交于 2020-01-12 16:53:33
上回我们介绍了两种有穷自动机模型——确定性有穷自动机DFA和非确定性有穷自动机,以及从正则表达式经过NFA最终转化为DFA的算法。有些同学表示还是难以理解NFA到底怎么转化为DFA。所以本篇开头时我想再多举一个例子,看看NFA转化为DFA之后到底是什么样。首先我们看下面的NFA,它是从一组词法分析所用的正则表达式转换而来的。这个NFA合并了IF、ID、NUM、error这四个单词的NFA。因此,它的四个接受状态分别代表遇到了四种不同的单词。 用上一篇学到的方法,我们需要求出一个DFA,它的每个状态都是NFA状态集合的一个子集。首先我们要定义任何状态的ε-闭包,之所以叫ε-闭包,是因为它对ε转换而言是封闭的,也就是说ε-闭包内任何状态,经过ε转换之后,都还是闭包内的一个状态。接下来,从初始状态ε-闭包开始,我们要计算输入任何一种字符后,NFA所能转换到的下一个状态集合。这一步的公式是: 其中那个U型的符号,表示:对NFA状态集合d中的任何状态s,求出s在遇到符号c之后所能达到的所有状态组成的集合,再把所有这种集合求并集。最后,再对这个集合求出ε-闭包。我很难找出一种更简单的描述方式,简而言之就是要计算出NFA状态集合d,在输入符号c之后,所能达到的一切状态的新集合。而这个集合,就会变成DFA的一个状态,这个状态是从d,沿着一条标有c的边达到的。我们首先求出初始状态的ε

集合类线程安全问题

淺唱寂寞╮ 提交于 2020-01-11 01:17:08
文章目录 集合类线程安全问题 ArrayList 并发修改异常 为什么出现 解决方案 写时复制 其他unsafe集合类 集合类线程安全问题 ArrayList 先不谈ArrayList线程安不安全问题,看其源码可以知道,我们在new一个ArrayList的时候,其实底层使用的是数组作为数据结构的。 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10 ; /** * Shared empty array instance used for empty instances. */ private static final Object [ ] EMPTY_ELEMENTDATA = { } ; /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */ private static final Object [ ] DEFAULTCAPACITY_EMPTY

第8章:集合运算

别说谁变了你拦得住时间么 提交于 2020-01-10 23:33:46
集合运算:是用来把两个或多个查询的结果集做并、交、差的集合运算,包含集合运算的查询称为复合查询。 注意: 1.多个集合运算符,没有括号,那么从左到右的顺序计算 2.注:INTERSECT (相交) 和 MINUS (相减) 运算不是 ANSI SQL-99 兼容的,他们是 Oracle 特定的。 =============== 联合查询的特点: 1.返回由任一查询结果集包含的行,并且去除重复行,并且按照查询结果集的第一列升序排序。 2.默认安照第一列升序排序 3.两个集合列数和数据类型对应,列的名字可以不一样 例子: select empno,ename from emp union select deptno,dname from dept; 为演示案例,复制如下语句,并执行: 1.创建员工历史岗位表 emp_jobhistory: CREATE TABLE emp_jobhistory( id NUMBER,–流水号 empno NUMBER,–员工编号 job VARCHAR2(9),–岗位 begindate DATE,–开始日期 sal Number(7,2)–在该岗位时工资 ) 2.插入如下数据: INSERT INTO emp_jobhistory VALUES(1,7839,‘TRAINEE’,‘17-11月-81’,500); INSERT INTO emp

数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结

瘦欲@ 提交于 2020-01-10 18:11:19
一.数据结构:4种--<需补充> 1.堆栈结构: 特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素; 代表类:Stack; 其它:main方法最后一个出去; 2.数组结构: 特点:一片连续的空间;有索引,查找快;增删慢; 代表类:ArrayList; 应用场景:用于查询多的场景,如天气预报; 3.队列结构: 特点:FIFO(先进先出);入口/出口在两侧; 代表:Queue接口 应用场景:12306购票网站 4.链表结构: 特点:增删快,查询慢; 代表:LinkedList类;Linked开头的都是链表结构. 应用场景:比如监控;历史操作/日志; 二.List接口:(java.util) 定义:public interface List<E> extends Collection<E>{} List接口属于Collection的子接口之一,Collection中的所有方法,List接口的对象都能用. 特点:有序,带索引,允许重复,可以存放多个null值; 常用子类:ArrayList;LinkedList; 常用方法: public void add(int index,E element){}在指定位置增加元素; public boolean addAll(int index, Collection<? extends E> c){

python 面向对象总结4

倾然丶 夕夏残阳落幕 提交于 2020-01-10 03:37:11
2.给程序传参 2.1.什么是给程序传参 我们在工作中通常会在命令行下运气或者启动我们的程序,例如python在命令行下运行。 但是有的情况是我们需要给我们的可执行程序传递参数,例如 ping 192.168.1.1 service iptables restart 格式:可执行程序性 参数1 参数2 … python xxx.py 2.2.Python中怎么样使用 既然python可以在命令行下运行,那么我们将来有可能需要给我们的python程序传递参数。python解释器给我提供的系统模块 sys中有个属性argv中就包含了通过命令行方式传递过来的所有参数。 例如:执行sendMsg.py文件,给指定的的ip地址 发送特定的消息 命令行下执行: 3.列表推导式(重点) 3.1.什么是列表推导式 所谓的列表推导式,就是指的轻量级循环创建列表 基本使用 变量 = [表达式 for 变量 in 列表] 原理: 3.2.实例 1.循环过程中加条件: 得到1-20中间的所有偶数的列表 2.两个for循环:生成坐标点 4.集合、列表、元组 4.1.什么是集合 Pyton中数据类型中的一种:set 集合 集合就是将不同的元素放在一起组成一个集合对象。 先看看集合是如何创建的: 4.2.集合set、列表list、元组tuple之间的相互转化 4.3.集合的功能 集合与集合直接可以进行运算

java集合问题篇

此生再无相见时 提交于 2020-01-09 04:02:14
java集合问题篇 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? hashmap如何扩容 hashmap是如何解决hash冲突的 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? 首先判断数组是否为空(为空就初始化数组),不空----》key是否为空(空:将null插入到数组的0号位置),不空—》根据key算出hash值,再根据hash值算出将要插入的数组的下标【(数组长度-1)&hashcode】,如果该位置有元素了,则将该元素和要插入的元素进行比较(先比较hash,再比较key,相同,则覆盖其value,不同,则jdk1.7使用头插法将添加的元素加入到链表头,然后将链表下移。jdk1.8是使用尾插法。【1.8由于使用了红黑树,总是要遍历链表的,所以直接将其放入尾部】)插入元素后,计数变量:size++ hashmap如何扩容 初始化hashmap的时候会有默认的数组长度16,加载因子3/4,此时阈值为16 3/4=12; 当元素超过12个时就会进行扩容。新数组长度是16 2=32,阈值是32*3/4=24

数据类型及常用方法

爱⌒轻易说出口 提交于 2020-01-08 06:03:36
可变类型与不可变类型  1、可变类型     值改变,id不变,说明是直接改变原值,是可变类型  2、不可变类型     值改变,id也跟着改变,说明是产生了新的值,是不可变类型 整型(int)与浮点型(float) ps:整型,浮点型:存一个值,不可变 #整型 #用途:记录电话号码,年龄,QQ号等纯数字 #定义方式  age=18 #age=int(18) print(type(age)) int('abadf') #报错 int('10.1') #报错 int('101') #int只能将字符串中包含纯数字转成整型 # 十进制转成其他进制 print(bin(12)) print(oct(12)) #12 =>1*(8**1) + 2*(8**0) print(hex(16)) # 进制转换(了解**) # 其他进制转成十进制 print(int(10,2)) print(int(10,8)) print(int(10,16)) #浮点型float   作用:薪资,身高,体重,体质参数等浮点数相关 salary=3000.3 #本质salary=float(3000.3) 字符串(str) ps:字符串类型:只能够存一个值,有序且不可变 #作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon' #优先掌握的操作: #1

Java容器的常见问题

为君一笑 提交于 2020-01-07 09:24:06
记录Java容器中的常见概念和原理 参考: https://github.com/wangzhiwubigdata/God-Of-BigData#%E4%B8%89Java%E5%B9%B6%E5%8F%91%E5%AE%B9%E5%99%A8 https://blog.csdn.net/justloveyou_/article/details/78653929 基础容器 ArrayList(动态数组)、LinkedList(带头结点的双向链表) ArrayList public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 默认初始容量为 10; 扩容机制:添加元素前,先检查是否需要扩容,一般扩为源数组的 1.5 倍 + 1; 边界检查(即检查 ArrayList 的 Size):涉及到 index 的操作; 调整数组容量(减少容量):将底层数组的容量调整为当前列表保存的实际元素的大小; 在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理; LinkedList LinkedList 不但实现了List接口,还实现了Dequeue接口。因此

线性代数基础知识(三)—— 矩阵乘法

谁说胖子不能爱 提交于 2020-01-05 22:13:13
矩阵 A ∈ R m × n 和 B ∈ R n × p 的乘积为矩阵 : 其中: . 请注意,矩阵A的列数应该与矩阵B的行数相等,这样才存在矩阵的乘积。有很多种方式可以帮助我们理解矩阵乘法,这里我们将通过一些例子开始学习。 2.1 向量的乘积 给定两个向量x,y ∈ R n ,那么x T y的值,我们称之为向量的 内积 或 点积。它 是一个由下式得到的实数: . 可以发现,内积实际上是矩阵乘法的一个特例。通常情况下x T y = y T x。 对于向量x ∈ R m , y ∈ R n (大小不必相同),xy T ∈ R m×n 称为向量的 外积 。外积是一个矩阵,其中中的每个元素,都可以由 得到,也就是说, . 我们举个例子说明外积有什么用。令 1 ∈ R n 表示所有元素都是1的n维向量,然后将矩阵 A ∈ R m × n 的每一列都用列向量 x ∈ R m 表示。使用外积,我们可以将A简洁的表示为: . 2.2 矩阵 - 向量的乘积 对于一个矩阵 A ∈ R m × n 和向量 x ∈ R n ,他们的乘积为向量 y = Ax ∈ R m 。理解矩阵向量乘法的方式有很多种,我们一起来逐一看看。 以行的形式书写A,我们可以将其表示为Ax的形式: . 也就是说, y 第 i 行的元素等于A的第 i 行与x的内积 . 咱们换个角度,以列的形式表示A,我们可以看到: . 换言之,

Compiler - lexical analysis

无人久伴 提交于 2020-01-05 01:39:47
概念 : 1. Context-Free Grammar : a). 一个终结符集合。b). 一个非终结符集合。c). 一个产生式集合,产生式左部为一个非终结符,右部为终结符或非终结符序列。d). 一个初始状态。 2. Parse Tree(Concrete Syntax Tree), Abstract Syntax Tree(AST) 文法: list -> list+digit | list-digit | digit; digit -> 0|1|2|3|4|5|6|7|8|9 抽象语法树不包含具体的文法信息(或形式) 3. Syntax-Directed Translation 翻译模式: 参考Antlr中的Arbitrary Actions。Syntax-Directed: 文法符号与一个属性集合关联,产生式与一个语义规则集合关联,文法符号(属性集合)和语义规则集合构成Syntax-Directed定义,参考Antlr的Rewrite Rules 4. Nondeterministic finite automata NFA a). 一个状态的有穷集合S; b). 一个输入符号集合Σ; c). 一个转换函数move,把状态和符号组成的二元组映射到状态集合; d). 状态s0是唯一的初始状态; d). 状态集合F是终止状态集合 5. Deterministic finite