自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(664)
  • 资源 (5)
  • 论坛 (16)
  • 收藏
  • 关注

原创 【算法学习笔记】27:区间DP

1 区间DP区间DP指的是状态表示是某个区间的DP问题。在区间DP里循环的顺序不太好写,因为要在计算时确保所需要的状态都计算过了,顺序一般可以先按区间长度从小到大来枚举。2 模板题:石子合并分析如下图。只要考虑最后一步,合并的是左右的哪两个区间,也就是枚举分界点kkk,最后一步合并的就是区间[i,k][i, k][i,k]和[k+1,r][k + 1, r][k+1,r]。不管分界点kkk怎么选,合并代价都是区间[i,j][i, j][i,j]的区间和,这里用前缀和来维护,所以就是s[j]−s[

2021-02-17 17:27:48 69

原创 【算法学习笔记】26:匈牙利算法(二分图最大匹配)

1 简述给定一个二分图,例如:匈牙利算法能够快速的计算出一种匹配方式,使得匹配的数量最多。注意,一个成功的匹配方式中,没有两条边是共用了同一个点的。形象的说,这个问题可以理解成二分图两边分别是男生和女生,有连线的表示可以凑成一对,匈牙利算法就是用来计算最多能够凑成多少对(不存在脚踏多条船的情况)。例如左边是男生,右边是女生,可以任选一方为主动方,比如是男生方,那么流程如下。对于每个男生结点,对所有与之有连线的女生结点,检查对应的女生是不是单身,如果是就直接凑成一对。那么在上图的例子中,前两个男

2021-02-16 16:07:30 84

原创 【算法学习笔记】25:染色法(判定二分图)

1 简述要判断一个图是不是二分图,可以用两种颜色对图上的所有结点进行染色。染色法的基本思路是,如果一个图是二分图,那么一个结点所连接的所有结点都一定和这个结点属于不同侧,也就应该染上不同的颜色。所以只要先将一个结点染成颜色111,然后检查它的所有邻接结点jjj。如果jjj已经染过颜色了,而且和本结点的颜色一样,那么就发生了冲突,说明不能形成二分图。如果jjj结点没有染过颜色,就将其染成和自己这个结点颜色不一样的(比如自己是111,那么就把jjj结点染色成222),这是一个递归的过程,如果这个过程

2021-02-14 00:24:59 179

原创 【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

Prim算法和Dijkstra算法很相似,而且也按照是不是稀疏图分成了两种:对于稠密图,用朴素版的Prim算法,时间复杂度O(n2)O(n^2)O(n2)对于稀疏图,用堆优化版的Prim算法,时间复杂度O(mlogn)O(mlogn)O(mlogn)Kruskal算法的时间瓶颈在于它需要对所有边从小到大排序,所以时间复杂度是O(mlogm)O(mlogm)O(mlogm),由于m<n2m < n^2m<n2,所以mlogm<mlog(n2)=2mlognmlogm <

2021-02-13 00:15:33 51

原创 【算法学习笔记】23:Floyd算法(多源汇最短路)

1 简述Floyd算法用于求多源汇最短路,时间复杂度O(n^3)。首先用邻接矩阵里的d[i,j]d[i, j]d[i,j]存储所有的边(重边的时候取minminmin),然后就是三重循环,思路也是如果从iii到kkk,再从kkk到jjj,这个距离能比d[i,j]d[i, j]d[i,j]小,就更新一下:d[i,j]=min(d[i,j],d[i,k]+d[k,j])d[i, j] = min(d[i, j], d[i, k] + d[k, j])d[i,j]=min(d[i,j

2021-02-10 14:23:10 59

原创 【算法学习笔记】22:SPFA算法(带负权边单源点最短路、检测负权回路)

1 简述SPFA算法是对Bellman-Ford算法的优化,也是用于在存在负权边的图上,求单源点最短路,一般情况下时间复杂度可以看作O(m)O(m)O(m)的,最坏情况下时间复杂度是O(nm)O(nm)O(nm)。虽然SPFA算法是对Bellman-Ford算法的优化,但是不是所有用Bellman-Ford算法的问题都能用SPFA来代替。例如,对最短路经过的边数做一个限制,要求经过的边数≤k\leq k≤k的最短路,这个时候能用Bellman-Ford算法,但是不能用SPFA算法来做。SPFA算法是单

2021-02-10 00:21:12 101

原创 【算法学习笔记】21:Bellman-Ford算法(有边数限制的单源点最短路)

1 应用:计算有边数限制的单源点最短路Bellman-Ford算法用于在存在负权边的图上,求单源点最短路,时间复杂度O(nm)O(nm)O(nm)。但是因为该算法的改进版SPFA,在求单源点最短路的问题上几乎总是优于Bellman-Ford算法,所以Bellman-Ford算法一般只应用在对边的数量有限制的最短路问题,即限制经过边的数量不超过kkk。Bellman-Ford算法属于动态规划算法。Bellman-Ford算法的基本思想是,如果要求最短路的长度最多为kkk(如果不限制,那其实就是k=n−1

2021-02-08 17:26:10 39

原创 【算法学习笔记】20:朴素Dijkstra与堆优化Dijkstra(无负权边单源点最短路)

Dijkstra算法用于在所有边权都非负的图上,求单源点最短路。设nnn是图上结点的数量,mmm是边的数量。则朴素Dijkstra算法的时间复杂度是O(n2)O(n^2)O(n2),适合稠密图(点少边多);堆优化版的Dijkstra算法的时间复杂度是O(mlogn)O(mlogn)O(mlogn),适合稀疏图(点多边少)。如果是稠密图,那么边的数量mmm和点数的平方n2n^2n2基本是一个规模的。如果用堆优化版的Dijkstra,那么复杂度就可以视为O(n2logn)O(n^2logn)O(n2logn

2021-02-08 00:17:08 97

原创 【算法学习笔记】19:拓扑排序

1 简述计算拓扑序列的一个方式是,用BFS来尝试访问所有的节点,但是有一个约束就是只有入度为000的节点才能被加入到扩展队列里。每次从队列里取出一个节点,也就同时在图中将这个节点拆除,所以它的所有后继的节点都减少111,如果已经减少到000,那么就可以加入到队列中。在上面的例子中,一开始只有aaa的入度是000,所以先把aaa加入到队列中,队列中:aaa然后取出队头aaa并在图中拆除,然后它的后继ccc的入度变成111,bbb的入度变成000,把bbb加入到队列里,队列中:bbb然后取出队头b

2021-02-06 18:07:47 62

原创 【算法学习笔记】18:树与图的DFS与BFS

1 邻接表树和图的DFS和BFS,可以将树也看成图来存储,存储图的一个常用的存储结构就是邻接表。对于有向图而言,只存这个方向的边,对于无向图而言,存两个方向的边。在邻接表的实现中,用数组h来记录每个节点向外的边的链表头指针,初始时都是空(即-1)。用idx来表示链表节点的分配位置。数组e表示节点的值,即是目标节点的编号。数组ne表示节点的nextnextnext指针,也就是链表节点的下一节点被分配的下标。注意,当用邻接表去存无向图(或者树)的时候,因为a→ba \to ba→b和b→ab \to ab

2021-02-06 17:23:50 34

原创 【算法学习笔记】17:DFS与BFS

1 DFS深度优先搜索常用于解决需要给出所有方案的问题,因为它的搜索顺序就是能够得到一个完整的搜索路径(方案)后回退再去搜索其它的方案。1.1 例题:排列数字由于要求所有排列的方案,可以每次从1..n1..n1..n里拿一个数字,然后记录一下这个数拿过了,再递归地搜索下一个数字,当所有数字都取完之后,就得到了一种方案,将这种方案输出,回退之后去搜下一个方案。“回退之后去搜下一个方案”,其实就是在每层DFS的时候遍历一下所有的允许使用的数字,作为下一个位置的数字。需要注意的是在进入下一层DFS之前要把

2021-02-06 00:21:47 42

原创 【数据结构学习笔记】17:模拟散列表

哈希表通过空间换时间的方式,能够实现平均在O(1)O(1)O(1)的时间里插入和删除元素,它能够将较大的空间的数据映射到一个小范围里。手写哈希表的时候,哈希函数一般就是将数值关键字对一个数取模,由于取模的结果就是000到这个数,所以这个模数其实就是数组哈希表的长度NNN,取模结果对应到数组模拟哈希表中从零开始的一个下标。为了处理数值关键字是负数的情况,xxx对NNN的取模运算(计算哈希值kkk)是:k=(x%N+N)%Nk = (x \% N + N) \% Nk=(x%N+N)%N在这种方式中,

2021-02-05 21:16:07 54

原创 【数据结构学习笔记】16:模拟堆与堆排序

1 简述1.1 堆的性质与操作大根堆(小根堆)是一棵完全二叉树,其性质是每一个结点都是≥\geq≥(≤\leq≤)左右儿子结点的,因此满足每棵子树都是一个大根堆(小根堆)。特别要注意这里加粗的地方才是根本性质,即大根堆每个结点≥\geq≥左右儿子,小根堆每个结点≤\leq≤左右儿子,绝对不是“最大(最小)元素在根节点”这种导出性质。由于这个特性的存在,堆顶元素就是整个大根堆(小根堆)中的最大(最小)元素,可以快速取出。朴素的堆至少要支持:获取堆顶元素取出堆顶元素,然后在log(n)log

2021-02-05 00:58:24 97

原创 【数据结构学习笔记】15:并查集

1 简述并查集可以用来描述集合,能够做集合合并操作,检查两个元素是否属于同一个集合等。并查集用森林中的每棵多叉树来表达一个集合,初始时,每个元素单独在一个集合,也就是自己是一棵树:合并两个集合时,只要把一个集合的树根挂到另一个集合的根上。例如,合并元素111所在的集合和元素222所在的集合(图中以黄色结点为树根,绿色为非根):以一个更加一般的例子来说明合并的过程,例如这样两棵树(代表两个集合):合并时,把一棵树的树根挂到另一棵树上:并查集几乎都是用树的数组表示来实现,用一个int型数组p

2021-02-04 22:29:50 34

原创 【数据结构学习笔记】14:Trie树

1 简述Trie树是能够高效存储和查找字符串集合的数据结构,比较适合字符种类较少的问题,例如如果字符串中只可能出现262626种小写字符,那么Trie树长成这样:也就是说Trie树的树根是一个虚拟结点,然后它会分叉出262626个结点,分别对应每个小写字母,每个结点又分叉出262626个结点,这样往下不断展开。这样看起来Trie树的空间是指数级别的,非常大,但是实际上Trie树一开始只需要有一个虚拟的根节点,然后每次插入字符串只需要把字符串上的每个字符对应的结点创建好就行了,实际的空间占用很小。例

2021-02-04 16:35:14 36

原创 【算法学习笔记】16:单调栈与单调队列

单调栈和单调队列都是一类算法思想,是栈和队列在算法里很常见的应用。单调栈算法一般用模拟栈或者程序语言给实现的栈都可以,因为只要求在栈顶入栈和退栈,以及取栈顶元素。单调队列算法很多时候用手写的模拟队列比较方便,因为很多时候需要双口出队的队列,主要是在队尾也有删除元素的需求。而模拟队列都是游标移动来限定队列中的所有元素,所以用模拟队列很自然的可以做到双端队列的操作。1 单调栈单调栈是栈中的元素按照一个单调性来排列,每次入栈一个元素xxx时,如果加入这个元素会使得单调性被破坏,就不停的弹出栈顶元素,直到可

2021-02-03 23:42:54 71

原创 【数据结构学习笔记】13:模拟栈与模拟队列

这节学习用数组模拟栈和队列,这种方法相比内置的栈和队列,一方面比较通用,不受语言限制,另一方面速度也比较快。而且因为是用数组模拟的,所以可以对任意位置进行修改(如果有办法知道要修改的位置的下标的话)。1 模拟栈模拟栈比较简单, 将数组的扩展方向作为栈的入栈扩展方向,并记录一下栈中的元素数量(其实也就是当前栈顶的位置),每次入栈的时候,先将栈顶位置+1+1+1,然后在这个位置填入要入栈的数据即可。需要注意数组的长度至少需要开到栈最大容量+1+1+1的大小,因为000位置是不存数据的,用来标识栈是否是空的

2021-02-03 20:11:22 30

原创 【数据结构学习笔记】12:静态单链表与静态双链表

链表可以用指针+结构体的实现方式,也可以用数组模拟,也就是静态链表。相比之下静态链表的效率比较高,因为指针+结构体的方式,每次创建一个新的结点的时候都要new一块结点空间,这个操作是比较耗时的。1 静态单链表静态单链表用的最多的地方就是在邻接表的链的实现上,因为邻接表实际上就是若干个单链表,邻接表用的最多的就是存储树和图。所以涉及树和图的问题的时候,如果需要读入数据存到邻接表里,就需要这部分知识了。在单链表里,每个结点都要存一个值valvalval和指向下一个结点的nextnextnext指针,然后有

2021-02-03 13:43:56 33

原创 【算法学习笔记】15:区间合并

1 简述区间合并问题也是一个贪心问题,由于比较常用所以单独拿出来。区间合并的解决方法是,把所有区间按照左端点lll从小到大排序,然后维护一个当前正在处理的区间[st,ed][st, ed][st,ed],如果遍历到区间和维护的区间有交集,就合并(能合则合),没有交集的时候,当前维护的区间就变成这个遍历到的区间。这里按照左端点排序好之后,每次遍历到的区间和当前区间[st,ed][st, ed][st,ed]只会有三种状态:情况(1)(1)(1)是l≤edl \leq edl≤ed并且r≤edr \le

2021-02-01 23:52:17 71

原创 【算法学习笔记】14:离散化操作

1 简述离散化是一种辅助解决问题的操作,当问题中涉及的数据范围非常大,但是实际使用到的数据是比较少的。并且问题的求解是和它范围里的其它数据有关系的,那么可以将这些可能使用到的数据放到一起,排序去重,就将它们映射到了一个新的较小的范围里。例如,下面几个数是在(−∞,∞)(-\infty, \infty)(−∞,∞)范围里的,实际用到的数:6、−10000、114514、1919、−123、19196、-10000、114514、1919、-123、19196、−10000、114514、1919、−

2021-02-01 21:43:50 42

原创 【算法学习笔记】13:双指针算法

双指针算法的核心思想就是在序列上找到这样一个性质,序列上的一个指针jjj随着另一个指针iii的移动,是单向移动的,不会发生回退,这样就能在移动指针iii的时候去移动指针jjj。由于两个指针都最多只会把序列遍历一遍,所以时间复杂度往往是从O(n2)O(n^2)O(n2)优化到O(n)O(n)O(n)的,也就是双指针算法能够优化掉时间复杂度上的一个维度。双指针算法中,两个指针可能是同向移动的(类似滑动窗口),也可能是对向移动的。1 例题:最长连续不重复子序列在这个问题里,试想用sis_isi​表示以a[i

2021-01-31 22:59:33 47

原创 【算法学习笔记】12:前缀和与差分

1 一维前缀和前缀和可以用于快速计算一个序列的区间和,也有很多问题里不是直接用前缀和,但是借用了前缀和的思想。用s[i]s[i]s[i]表示a[0]+a[1]+...+a[i]a[0]+a[1]+...+a[i]a[0]+a[1]+...+a[i]的和(所以称为前缀和),那么要计算区间[l,r][l, r][l,r]的和,也就是计算a[l]+a[l+1]+...+a[r]a[l]+a[l +1]+...+a[r]a[l]+a[l+1]+...+a[r],只需要计算s[r]−s[l−1]s[r] - s[

2021-01-31 16:12:25 53

原创 【算法学习笔记】11:高精度整数A+B、A-B、A*b、A/b

高精度算法是在计算问题涉及的数据范围超过该程序语言的表示能力时,用数组模拟数学运算的一类算法。本节学习高精度的整数四则运算,其中乘法只要求一个因子是高精度,除法只要求被除数是高精度。以下,用大写字母(如AAA、BBB)表示高精度的整数,用小写字母(如bbb)表示用编程语言自带的整数类型就能表达的整数。以下默认是十进制数表示下的整数四则运算操作,在其它进制表示下也是类似的。1 高精度整数A+B模板题:高精度加法。要计算两个高精度整数AAA和BBB的和,可以用列竖式的思想,从最低位开始,将低位加起来然后

2021-01-30 17:47:56 79

原创 【算法学习笔记】10:整数二分与浮点数二分

二分法用于解决这样一类问题:一个区间能分成左右两部分,左半部分满足性质AAA,右半部分不满足性质AAA。问题的目标是求解这两部分的分界点。所以二分法和区间里有没有单调性其实没什么关系,但是很多问题里是从单调性导出了上面的性质,上面的性质才是一个问题能用二分法求解的最本质的性质。二分法每次取区间的中间元素,通过判断区间中点元素a[mid]是否满足性质AAA就能断定求解目标是在mid的左边还是右边,从而每次把求解区间长度缩减一半。1 整数二分1.1 特点在整数二分问题里,需要考虑缩减区间时是否要保留m

2021-01-29 20:31:44 77 2

原创 【算法学习笔记】9:归并排序与统计逆序对

归并排序归并排序的思想是基于分治法,其思路是:将待排序区间平分成左右两半,左右两侧分别递归地做归并排序。将这两个有序的区间合并(每次落一个较小的下来),就将这个区间排好序了。#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N], tmp[N];void merge_sort(int q[], int l, int r) { // 如果区间里已经<=1个数了,就直接返回

2021-01-28 22:46:22 87

原创 【数据结构学习笔记】11:树状数组

树状数组,也叫Binary Indexed Tree(很多国内资料翻译成二叉索引树,但是树状数组显然不是二叉的),主要应用在一定规模地同时存在这两个问题的场景下:求数组中某个区间的和修改数组中的某一个数使用树状数组做这两个操作的时间复杂度都是O(logn)O(logn)O(logn)的。想一下和已经学过的做法的比较,对于上面两种操作。一个做法是直接用数组来存每一个数,那么求区间和的操作时间复杂度是O(n)O(n)O(n)的,修改数组中的某一个数的时间复杂度是O(1)O(1)O(1)的。另一个做法

2021-01-02 22:10:18 90

原创 【模型检测学习笔记】10:有限状态迁移系统上的IC3算法

IC3算法全称是Incremental Construction of Inductive Clauses for Indubitable Correctness,可以用来检测迁移系统上的不变性性质。1 术语约定1.1 clause和literal这里逻辑公式(logic formula)一律用合取范式(conjunctive normal form,CNF) 来表示,CNF中的每一项是一个clause,每个clause是若干literal的析取,每个literal是一个逻辑变量或者逻辑变量的非,例如

2020-11-23 15:13:20 395 1

原创 【nuXmv学习笔记】4:模型检测实例

例子1:带有请求操作的四位加法器在笔记2最后例子里的四位加法器之上添加了请求操作的模型。在这个模型里,一开始加法器在闲置状态,请求来了之后,加法器的最低位工作得到结果,同时将请求信号和这一位计算时产生的进位信号送给高一位,如果反复,直到四位加法器的最高位完成计算时,整个加法器的计算就完成了。在计算完成之前,要一直保持请求信号的存在,这样才能保持操作数不变,这样每一位的加法结果才能不丢失。-- 一位加法器(请求,操作数1,操作数2,进位)MODULE bit-adder(req, in1, in2,

2020-11-21 16:17:35 229

原创 【算法学习笔记】8:快速排序中的边界问题

基本思路快排的思想是基于分治法,其思路是:确定分界点:给定要排序的数组q,先在数组中找一个数作为分界点值x,分界点可以取左边界值x = q[l],可以取右边界值x = q[r],可以取数组中间的数x = q[l + r >> 1],也可以随机取一个。调整区间:将数组划分成两个区间,使得左半部分所有的数都<= x,右半部分所有的数都>= x。递归处理左右两个区间。快排有多种实现方法,在y总的模板里,分界点的位置不一定是x,因为x参与交换之后仍然会被留在左右区间中的一个里。

2020-11-20 13:54:51 474 3

原创 【nuXmv学习笔记】3:模型检测流程

1 对程序建模例如,给出一个使用更相减损术求最大公约数的程序:#include <bits/stdc++.h>using namespace std;int main() { int a = 10, b = 15; while (a != b) { if (a > b) a = a - b; else b = b - a; } cout << a <

2020-11-19 19:00:19 241

原创 【nuXmv学习笔记】2:约束式建模和多模块模型

1 约束式建模前面学习的建模方式都是赋值式(Assignment Style) 的,可以将这些模型转换成一种约束式(Constraint Style) 的,多数时候都会让模型的表达更方便。例如,下面的模型表达的是某种机器在就绪(ready)时,如果有请求来了,就会开始忙碌(busy),否则接下来既可以就绪也可以忙碌:MODULE mainVAR request : boolean; state : {ready, busy};ASSIGN init(state) := re

2020-11-18 22:34:44 174

原创 【nuXmv学习笔记】1:交互Shell和建模元素

nuXmv是一种基于NuSMV开发的符号模型检测器,能够在有限状态系统上使用SAT的一些算法做验证,能够在无限状态系统上(比如含有实数或者整数变量的系统)使用SMT技术做验证。nuXmv支持同步系统,对异步系统不再支持。1 nuXmv交互式Shell在官网下载nuXmv后直接就能拿到一个可执行文件,Windows上就是nuXmv.exe。主要使用的方式就是用它的交互式Shell,使用nuxmv -int即可进入(这里int是interactive的意思)。交互式Shell里有很多命令,使用help可以

2020-11-18 00:42:38 300 4

原创 【模型检测学习笔记】9:Binary Decision Diagrams

1 BDT→\to→BDD→\to→OBDD在符号模型检测中, 用布尔表达式表达一组状态,也就是对布尔公式中的每个变量赋值,可以计算出一个布尔值结果:f: Booln→Boolf: \ Bool^n \to Boolf: Booln→Bool所以可以用一个类似于组合解空间树(如果1视为选,0视为不选)的结构,即Binary Decision Tree (BDT) 来表达一个布尔公式,如下图:图中每个结点vvv有两个孩子分支,一条虚线对应low(v)low(v)low(v)表示v

2020-11-16 19:34:27 247

原创 【算法学习笔记】7:字符串前缀哈希法

字符串前缀哈希法有很多字符串的问题可以用字符串哈希来做,不一定要用KMP算法。这里的哈希方式是一些比较特殊的哈希方式,即字符串前缀哈希。比如有一个字符串abcde,则可以先预处理出来所有前缀的哈希,比如h[1]就表示a的哈希,h[2]就表示ab的哈希,特别的,定义h[0]=0​表示前0个字符的哈希值为0。要定义某一个前缀的哈希值,只要把字符串看成是一个PPP进制的数,那么每一位的ASCII码就表示这一位的数字是多少。那么上面的例子的字符串哈希值(即对应的十进制的数值)为:a×P4+b×P3+c×P2

2020-11-07 22:27:56 218

原创 【UPPAAL学习笔记】1:基本使用示例

这节用三个例子学习UPPAAL的使用。1 简述1.1 性质描述UPPAAL里支持用CTL公式描述功能安全性质:A[] φA⟨⟩ φE[] φE⟨⟩ φ\begin{aligned}& A[] \ \varphi \\& A\langle \rangle \ \varphi \\& E[] \ \varphi \\& E\langle \rangle \ \varphi\end{aligned}​A[] φ

2020-09-14 00:36:12 1969 13

原创 【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)

在学习这节之前要给TTool装配好ProVerif,具体是在TTool/bin/config_*.xml,这里*是linux或者macos或者windows,在里面配置下面的标签。<ProVerifCodeDirectory data="../proverif/" /><ProVerifVerifierPath data="../../proverif/proverif.exe" /><ProVerifVerifierHost data="localhost" />

2020-08-25 11:01:25 259

原创 【TTool学习笔记】3:SysML-Sec建模方法(模型相关)

手册中的例子从TTool远程库导入,File->Open Froom TTool repository->SysMLSecTutorial.xml。1 方法论(Methodology)方法论图和AVATAR中的不太一样,但是大致流程还是一样的,左边单独的一块是假设,然后中间是需求和攻击,其中的信息安全需求(Security Requirement) 和攻击(Attacks) 是AVATAR方法论里没有的,因为SysML-Sec会比较关注去设计安全的(safe and secure)嵌入式系统

2020-08-23 16:27:56 233

原创 【TTool学习笔记】2:AVATAR建模方法(设计和验证)

1 块图(Block Diagram)块图通过New Design添加,描述的是系统的主要结构。其中,建模元素包括:Security pragmas,用规约语言写信息安全性质的地方Safety property (UPPAAL),用规约语言写功能安全性质的地方,用的是UPPAAL的方法Performance property,用规约语言写和性能有关的性质的地方Block,块图中的块,可以添加属性、方法、输入输出信号、原型实现代码Crypto Block,加密块,相比普通的块就只是多添加了各种

2020-08-19 21:07:16 143

原创 【TTool学习笔记】1:AVATAR建模方法(分析相关)

在TTool设计面板上右键,有选择New xxx Methodology,其中包括:DIPLODOCUS,用来做嵌入式系统的划分AVATAR,用来设计嵌入式软件SysML-Sec,用来设计安全的(safe and secure)嵌入式系统这篇了解一下其中的AVATAR建模方法中,和分析相关的一些图。1 方法论(Methodology)最开始要创建一个New AVATAR Methodology大面板,即AVATAR方法论的面板,这个面板可以整合其它的一些建模面板。这里能清楚的看到整个流程

2020-08-18 00:45:11 179

原创 【ProVerif学习笔记】5:理解验证后的输出

ProVerif的输出比较长,格式如下:其中[Equations][Equations][Equations]给出了涉及的等式的内部表示。[Process][Process][Process]给出了将所有的进程宏展开之后的进程,在进程里面会看到一些标号为{n}\{n\}{n}的地方,这只是为了方便引用。[Query][Query][Query]部分就是开始评估用户给出的性质查询(对应输入文件中的query),也就是试图证明违反性质的状态是不可达的,然后在[Goal][Goal][Goal]这一行就会显示

2020-08-14 23:23:17 297

有关Linux进程家族树

操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。

2017-10-03

举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程

上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。

2017-12-03

算符优先分析法

设有文法G[S]:S→SaF | F F→FbP | P P→c | d (1) 构造G[S]的算符优先关系表 (2) 分别给出cadbdac# 和 dbcabc# 的分析过程

2018-05-22

已经整合好的小型S2SH框架(完全注释+依赖jar包)

已经将Struts2和Hibernate与Spring整合,测试可用。含三个框架的核心依赖jar包,不含JDBC驱动,测试例子是用MySQL作为数据库的。请自行更换数据库,添加驱动,修改Hibernate设置和数据库配置。 含有大量注释,适合学生立即上手开发课程项目。

2018-05-13

有关ADSL与调制技术

有关ADSL和相关的调制技术,计算机网络研讨课演讲PPT。

2017-10-04

普通域名和专有域名的显示结果不一样

发表于 2020-08-19 最后回复 2020-08-19

C语言里有%n这个用法吗

发表于 2017-05-07 最后回复 2020-05-19

分类专栏的实际文章数显示有bug

发表于 2020-03-06 最后回复 2020-03-06

【严重bug】文章放不到自己的分类专栏里

发表于 2019-12-22 最后回复 2019-12-22

请问下图中的新功能如何修改和关闭?

发表于 2019-12-06 最后回复 2019-12-06

创建新分类,添加文章显示文章数有bug

发表于 2019-12-02 最后回复 2019-12-03

分类下的博文排序为什么乱了?不按发布时间排序了?

发表于 2019-08-26 最后回复 2019-09-16

自定义模块不再显示了???

发表于 2019-05-31 最后回复 2019-08-25

希望能在【代码片样式】中加入以前默认的那种样式

发表于 2018-09-23 最后回复 2019-05-10

现在怎么白天都要审核了

发表于 2019-04-19 最后回复 2019-04-19

更新后的Markdown编辑器上按回车有问题

发表于 2019-01-13 最后回复 2019-04-19

请帮我删除两个空白专栏吧

发表于 2018-09-18 最后回复 2018-09-20

专栏申请没有响应

发表于 2018-09-07 最后回复 2018-09-11

怎么突然又有审核机制了。。

发表于 2018-04-16 最后回复 2018-09-07

一个BUG

发表于 2017-11-08 最后回复 2017-11-09

新版博客下,写新文章发表后,左上角数字不会增加了

发表于 2017-09-18 最后回复 2017-10-02

空空如也

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

TA关注的人 TA的粉丝

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