自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 一种基于“空间换时间”的求FIRST集和FOLLOW集的方法

写在前面这学期在上《编译原理》这门课程,学到FIRST和FOLLOW集的求解时觉得老师给的方法虽然直观,但是看不到尽头,对于我这种容易粗心的人而言反复的检查演算就是一种折磨龙书中对FIRST和FOLLOW集的求解方法P140∼P141P_{140} \sim P_{141}P140​∼P141​先上例题:A→BCc ∣ gDBA\rightarrow BCc \ | \ gDBA→BCc ∣ gDBB→bCDE ∣ ϵB\righta

2021-03-23 21:51:12 109

原创 PAT《算法笔记》入门篇(2)算法初步-排序散列递归贪心二分等

排序A1025问题:思路:关键:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int N,K;const int maxn = 30010;struct stu{ char id[15]; int score,final_rank,local_number,local_rank;};stu a[maxn];bool cmp(stu a,stu

2021-03-07 11:34:45 237

原创 vector的sort与优先队列priority_queue

vector的sort属于小根堆。而priority_queue默认是大根堆,因此在struct内部重载<要注意方向。#include<cstdio>#include<vector>#include<queue>#include<algorithm>using namespace std;struct edge{ int weight; int u,v; edge(int a,int b,int c):weight(c),u(a),v

2021-03-07 11:29:09 192

原创 PAT-第5章-入门篇(3)

分数的四则运算通用模板#include<cstdio>#include<algorithm>using namespace std;struct Fraction{ ll up,down;};Fraction reduction(Fraction result){ if(result.up<0){ result.up*=-1; result.down*=-1 } if(result.up==0){ result.down=1; }else{

2021-03-07 11:28:48 204

原创 PAT《算法笔记》第三章-入门篇(1)-入门模拟

进制转换A102710进行转13进行,并将10转换为‘A’#include<cstdio>using namespace std;int main(){ int r,z[10]={0},num = 0,a[3]; for(int i=0;i<3;i++) scanf("%d",&a[i]); printf("#"); for(int i=0;i<3;i++){ num = 0; r = a[i]; if(r==0){ printf("0

2021-03-07 11:28:10 129

原创 PAT甲级生词

List item

2021-03-07 11:27:54 65

原创 PAT-图与动规

参考资料:《算法笔记》、柳神csdn博客

2021-03-07 11:25:39 128

原创 2021-03-05 PAT第一次模拟 范围【1120-1123】

感悟:前两题我在40分钟内解决了,但实际上如果仔细一些可以在半小时内完成。第三题是判断哈密顿环的问题,有一定的知识背景要求,当然学过图论的应该都知道一些的。一开始我还觉得按照PAT的尿性,可能给的无向图的信息都是有迷惑性的,比如可能会有一些孤立点?但是实际上是没有的。只要了解到环的特性:环长为点数+1,以及头尾是一样的。以及哈密顿的特性:所有点都经过。那么只剩下一个样例过不了了。对于最后一个样例,我们还需要判断题目给出的这个path上那些相邻点是不是连通的,需要根据前面给出的图来进行判断,如果中

2021-03-05 22:40:17 61

原创 PAT《算法笔记》 提高篇(1)栈、队列、链表

栈A1051#include<cstdio>#include<vector>#include<stack>using namespace std;int main(){ int M,N,K,m,cnt; vector<int> v; scanf("%d%d%d",&M,&N,&K); for(int i=0;i<K;i++){ v.clear(); sta

2021-03-05 16:52:44 76 1

原创 用栈实现简单表达式的计算

对于一个表达式,比如:1+2*3我们分两步走,第一步 将中缀表达式转换为后缀表达式这里我们需要用到栈和队列。栈用来临时存放操作符,队列用来保存后缀表达式。同时,我们还需要一个结构体node来同时表示操作数和操作符。struct node{ double num; char op; bool flag;};stack<node> s;queue<node> q;如果遇到操作数,我们就将其入队列;如果遇到操作符,我们需要比较其与栈顶操作符的优先级,当当前操作符

2021-03-05 10:04:45 427 1

原创 PAT-A1119 Pre- and Post-order Traversals

问题:根据一个树的先序序列和后序序列判断这棵树是否唯一。首先,为什么会不唯一?看上面两个图,它们的先序序列:a b后序序列:b a是一样的,因为b既可以在左边也可以在右边 !因此我们只需要判断根结点(递归意义上的“根”)下面有一个结点还是两个结点就可以了,如果只有一个结点,那么这棵树显然不唯一 !如果根结点有两个子节点,那么左子节点和右子节点根据先序序列显然是可以分清的(先左后右)参考柳神代码理解后一次ac,思路和柳神的要反一下(故意的hh),但是原理是一样的。#include<

2021-03-04 11:25:03 87 2

原创 PAT A1139 First Contact 快乐模拟【review】

问题:一个人要向另一个人表白,如果他们是异性,那么这个人会先找一个同性中间人,这个同性中间人再找另一个表白目标的同性中间人,最后这个中间人找到表白目标。如果是同性,那么中间就经过两个同性中间人。思路:模拟关键:1.存在0000或-0000这种更加特殊的情况2.不存在1024和-1024同时存在的情况,即不同考虑重名,一个人的性别是确定的。3.A在寻找同性朋友时,需要避免找到他想要的伴侣B,所以当当前朋友就是B或者B的同性朋友就是A时舍弃该结果4.建立同性朋友之间的表很重要。5.最后,四位数并

2021-02-22 13:06:50 114

原创 C++ vector与set互转

vector转set可以实现去重;set转vector可以方便自己实现排序(对于set貌似自己写的cmp不能用?不清楚 太菜了)vector<int> v;v = {1,2,2,3,3,4};//建立vectorset<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转setv.assign(st.begin(), st.end());//用assign实现set转vector在学习过程中涉及到的一些数据结构转换等问题.

2021-02-20 14:35:58 15920 3

原创 如何根据层序序列和中序序列建立一棵树

参考该博客最近复习了树方面的数据结构知识,在做题的过程中,我发现都是给先序(或者后序)与中序让求一棵树,没有碰到过给你层序和中序让求树的情况,故在此做一个整理以便于今后回顾复习。附有注释的代码:#include<cstdio>using namespace std;const int maxn = 110;int level[maxn],pos[maxn];//level存储层序序列,pos用于指示在中序序列中各个点的相对位置,下面会提到int N;struct node.

2021-02-19 20:26:10 381

原创 PAT-树与并查集

参考资料:《算法笔记》,柳神csdn博客PAT-A1020问题:给定后序和中序序列,要求给出层序序列。思路:根据后序和中序序列建树然后再层序遍历输出即可。关键:在建树过程中要考虑边界条件,即后序序列为空时if(preL>preR) return NULL 退出。PAT-A1053【hard】问题:给定一个每个结点都有权值的树并给定一个整数S,要求求出从根到叶子的路径上所有结点权值之和为这个整数S的所有这样的路径,并按照权值降序排列输出。思路:根据给定权值和信息建树,通过静态方式建树最.

2021-02-19 13:25:47 110 1

原创 软件构造——关于Map的KeySet和values方法

文章目录写在前面KeySet()方法values()方法解决方法写在前面在这段时间的复习和做题过程,我经常用到List,Set和Map这三个数据结构,前两个都属于容器类,我比较熟悉,而每当我使用到Map的一些方法时,我就有些不放心了,因此这篇文章主要介绍一下我对Map两个方法的疑惑与解决。KeySet()方法众所周知,这个方法是用来获取Map内部的包含Key的一个集合。其spec是这么说的Returns a Set view of the keys contained in this map

2020-07-09 16:56:23 582

原创 软件构造——从SOLID五大原则的角度看OOP

写在前面:由于已经复习了一遍,本文将通过SOLID五大原则以及各种设计模式的角度来对OO编程与设计做一个感受与总结。对于OOP,我们有很多关键词在脑海中,我也是。想起OOP,我会想到它的抽象操作,它的分离机制,它对于实现的封装,对于多个类的继承机制,为多个子类的情况而设计的多态机制。文章目录抽象抽象是啥?抽象的用处OCP怎么做?好处?LSP由于抽象协变与逆变由于多态DIP高层、低层抽象与实现策略模式的一个深刻例子继承分离与封装用处ISP什么时候用?好处RSP何时适用?好处?抽象抽象是啥?抽象,.

2020-06-26 09:28:42 170

原创 软件构造——单例模式的目的、实现与线程安全

前言:课上并未对单例模式进行详细的介绍,因此本篇博客介绍一下关于单例模式的一些内容。文章目录单例模式(Singleton Pattern)目的(Q&A)实现线程安全如何解决?单例模式(Singleton Pattern)目的(Q&A)Q:我们为什么需要这个模式?A:因为有时候我们需要的是一个独一无二的对象,这个对象只有一个实例,我们在不同时段调用这个实例时希望这个实例具有“记忆”(个人看法)。Q:那么哪些对象是需要具有独一无二这种特性的呢?A:有很多,比如缓存,注册表,在现.

2020-06-25 10:40:07 97

原创 软件构造-关于java.util.Arrays.asList方法

2020-06-04 21:24:39 297

原创 软件构造(8)对try-catch-finally的疑问与解决

在上课的过程中,有讲到finally中的return会在catch中return后继续执行,那么是否finally中的语句都会被执行?这个问题是值得探究的。通过查找资料和实践,我解决了这个疑问首先,我们知道不略是否catch到异常,finally语句都是会执行的,那么有没有不执行到的情况呢?情况一try { System.exit(0); throw new Exception(); } finally { System.out.prin.

2020-05-22 11:18:54 128

原创 软件构造(7)错误与异常处理

本节是对6.2节的一个总结,便于日后复习6.1主要说明了Robustness and Correctness(Reliability)的重要性,下面主要介绍异常处理,断言,防御式编程的具体操作。1 Error and Exception in Java由上图可知,Error和Exception都是继承于Throwable接口,其中Error和RuntimeException是Unchecked Exception;Exception中除了RuntimeException之外的都是Checked E

2020-05-15 15:35:24 427

原创 软件构造(6)面向可维护性的构造技术

本章是对5.3节的一个总结,便于日后复习这一节主要讲了基于状态的构造技术和基于语法的构造技术。1.基于状态的构造技术根据当前状态,决定下一步要执行什么操作、执行操作之后如何转移。1.1 基于自动机的编程思想:把程序看做是一个优先状态自动机,对“状态”和“状态转换”进行抽象和编程方式:将IXUS的执行分解为一组自动执行的步骤,各个步骤之间的通讯通过“状态变量”来进行,把程序的执行看做事各自动步骤的不断循环。Tips:可以使用枚举类型或其他数据结构去定义状态,对于状态转移表,一般使用二维数组。

2020-05-15 11:19:52 230

原创 软件构造(5)面向可维护性的设计模式

本章为对5.2节的一个总结,便于日后复习。1 Creational patterns(关于如何“创建类的新实例”)1)Factory Method pattern(工厂方法模式)“除了使用new操作符之外,还有更多制造对象的方法,你将了解到这个活动不应该总是公开地进行,也会认识到初始化经常造成“耦合”问题。”——《Design Patterns》工厂方法模式就像一个“虚拟构造器”,通过定义一个创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。当client不

2020-05-12 17:05:32 171

原创 软件构造(4) 复用——行为模式

震惊!继结构模式,又一模式横出江湖!一起跟着小编来康康吧~策略模式(Strategy)适用场合当你有多种算法来实现同一个任务,但需要根据client动态切换算法。比如,当有二维数组和邻接表两种实现方式来存储一个图的vertex和edge时,程序能够识别边和点的关系,来判断是稀疏图还是密集图,从而更好的实现。又比如,你需要排序一组数据,客户是用冒泡还是归并,亦或是快排?思想可以为不同...

2020-04-23 20:08:31 102

原创 软件构造(3)复用——构造型模式

本文为4.3部分(Deisin Patterns for Reuse)的笔记设计模式更强调多个**类**、**对象**之间的**关系**和**交互**过程1.结构型模式(Structural patterns)1.1 适配器模式(Adapter)适用场景类之间的接口不兼容思想通过增加一个接口,将实现的子类封装起来,让client面向接口编程(相当于一根HDMI的数据线想接一个VG...

2020-04-23 16:38:20 156

原创 软件构造(2)-泛型及类型擦除

泛型的概念泛型事实上就是将类型参数化的一种方式。在我们定义一些类、方法或接口时,我们不仅可以将一些普通参数传入,而且还可以将某一类型作为参数传入。我认为,由于不知道传入的具体类型是什么,可以广泛的表示一系列的类型,所以叫做泛型。泛型的由来JDK5之前是没有泛型的,泛型的诞生有其意义。List arrayList = new ArrayList();arrayList.add("aaaa"...

2020-04-04 14:33:02 121

原创 软件构造(1)海龟绘图问题7——对凸包问题的分析、困惑与解决

此处是链接<----MIT海龟绘图1.问题描述Problem 7: Convex hullsImplement convexHull, which computes the convex hull, the smallest convex set that contains all the points in a set of input points. The gift-wrappi...

2020-03-03 20:33:17 274

原创 “尝试写博客”之近世代数笔记——11.1~11.4半群和幺半群(1)

11.1近世代数的特点1.近世代数是以研究数字、文字和更一般元素的代数运算的规律及各种代数结构(系统)——群、环、域、代数和格等的性质为其中心问题。半群、群是一些具有一个二元代数运算的代数系统环、域和格是具有两个二元代数运算的代数系统布尔代数是有两个二元代数运算和一个一元代数运算的代数系统2.近世代数的三特点:采用集合论的记号对运算及其运算规律的重视使用抽象化和公理化的方法...

2020-02-27 19:25:19 2772 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除