自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MYSQL使用时遇到的困难及解决方法

忘记了密码启动mysql.exe后,加入bin目录之后,输入mysql -u root -p会显示要输入密码,如果忘记了,可以通过以下步骤重新设置:1.输入net stop mysql关闭服务;2.cmd中加入bin文件夹,输入mysqld --console --skip-grant-tables --shared-memory;3.重新打开一个cmd(两个cmd最好都用管理员权限!),输入mysql -u root -p,这时不用密码,回车就可进入;4.输入flush privileges

2021-04-08 20:45:24 306

原创 算法基础期末大胆押题

押题,看看自己的欧气。Kruskal算法里有集合的操作红黑树插入删除时间复杂度分析递推式求时间复杂度动态规划设计算法矩阵链乘渐近记号证明比较算法扩展

2021-01-15 14:33:58 120

原创 算法基础期末考点总结二十六——串匹配算法

串匹配问题一 定义串匹配问题的定义很简单,就是要在一般很长的文本中找和我手中的文本一样的串,就好像现在屏蔽词的机制,就得识别出文本中需要屏蔽的词的位置。二 专业术语模式串P:查找的目标,长度一般记作m文本串T:待查找的文本长度一般记作n有效偏移s:等价于模式串在文本串的s+1位置开始出现后缀: 】前缀:【三 算法1.BF算法最简单粗暴的算法:每一个可能为开头的字符都要考虑一下,时间复杂度为O(mn)2.RK算法添加了预处理的部分,对模式串可能出现的n-m个位置,赋予其一个值,既

2021-01-15 14:33:25 144

原创 算法基础期末考点总结二十五——多项式和快速傅里叶变换

一个图说明整章的内容,降低求多项式乘法的时间复杂度。在介绍算法之前,先介绍几个概念:FFT(快速傅里叶变换)FFT利用了分治策略以及折半定理。算法由系数求得DFT。又因为有以下定理...

2021-01-15 14:31:31 88

原创 算法基础期末考点总结二十四——所有节点对的最短路径问题

简单粗暴的方法对每个点,做一次单源最短路径算法。如果有负权值,必须选用bellman-ford算法,在稠密图里,时间复杂度高达O(n^4)运算重载+重复平方我们定义一个lij(m)为i到j的边至多有m条的最短路径权值之和。那么我们有初始化:有递推式:时间复杂度为O(V^4),没有改进。这时我们发现算法和矩阵乘法很像,而且对于l数组,有一个性质就是l(m+1)=l(m)(当m大于V-1时),所以我们每次求平方,使得时间复杂度变为O(V^3lgV)Floyd-Warshall算法定义di

2021-01-15 14:30:46 308

原创 算法基础期末考点总结二十三——单源最短路径算法

最短路径最短路径的子路径也是最短的,这使得最短路径问题能用贪心算法解决,并且,最后的最短路径图,也是一棵树。松弛操作对于每个顶点,d存储最短路径权重,Π存最短路径的上一个点。初始化:更新最短路径权重:Bellman-Ford算法bellman-ford算法适用于有权值为负边的图。因为最极端的情况下,整个图是一条链,那么如果从链的一端出发,也需要V-1次才能将最开始的d=0,传递到全图,所以循环V-1次,对每一条边进行松弛。最后判断是否还有没松弛的边,如果有,说明图中有权值为负的环路,

2021-01-15 14:28:45 285

原创 算法基础期末考点总结二十二——最小生成树

这一块是图论里讲了原理的,这里复习原理,还要看代码怎么写。一些概念1.最小生成树:首先是树,没有环,包括连通图所有顶点;然后最小,要求所有树边权之和最小。2.切割:对于集合,可以有多种划分使得其变成两个不相交集合的并集3.轻量级边:对于一个确定的切割,在横跨切割的所有边中,权重最小的边称为轻量级边。Kruskal算法贪心算法的体现,每次找权值最小,并且不会使得最小生成树中有环。如果采用前面说过的不相交集合数据结构实现方式,时间复杂度为O(ElgV)Prim算法prim算法采用最小优先队

2021-01-15 14:25:14 303

原创 算法基础期末考点总结二十一——广度优先搜索和深度优先遍历

写在前面首先,熟悉一下图,图的数据结构有邻接链表和邻接矩阵,数据结构的使用也是影响算法时间复杂度的因素之一;图还分稀疏图和密集图,对应的最优算法也不同。其次,图G常常表示为(V,E),V是vertex,顶点的意思,E是edge,边的意思,Adj是adjlist,邻接链表的意思。广度优先搜索首先,每一个点都初始化,d是从源节点到该节点的距离,Π是源节点到该节点的路径上,该节点上一个节点,color有三种,白色代表未访问,灰色代表已访问,但邻节点还未访问完,黑色代表节点以及其邻节点都访问过了。最后得

2021-01-15 14:02:33 239

原创 算法基础期末考点总结二十——顶点序号和顶点内容

这里是老师上课的时候特别讲了的,最后说考点的时候也讲了,出题概率极高。具体是指什么呢?这是在讲图的表示的时候,邻接链表:书上的图示是这样的:但老师觉得误人子弟,他画了这样的一个图。什么意思?意思是节点的内容不止是序号,还有很多信息,他们存在数组等数据结构里,而后面的邻接链表,是代表顶点之间的连接关系,只是一个序号,这就是顶点序号和顶点内容。邻接链表存储的是顶点的序号。...

2021-01-15 14:00:42 423 1

原创 算法基础期末考点总结十九——Fibonacci堆

Fibonacci堆性质Fibonacci堆是具有最小堆序的有根树的集合,同级之间是双向循环链表。Fibonacci堆还有两个域,min存储最小节点的指针,n存储当前堆里节点数,每个节点也有两个域,degree存储孩子的个数,mark指示自上次成为别的节点的孩子之后有没有失去过孩子。Fibonacci堆的势函数是t是tree的个数,m是mark的节点个数各种操作1.创建新Fibonacci堆初始化n和min即可,势函数为0,摊还代价和实际代价一样2.插入节点直接在min左边插入,然后视情况

2021-01-15 13:59:54 118

原创 算法基础期末考点总结十八——分离集合数据结构

这里笔者不是很熟悉,老师是在讲图算法的时候,返回来讲到这里的。基本操作建立新集合合并集合找到包含x的集合的根在编译原理实验中,就有关于集合操作的代码。链表操作这是集合链表的大概图示,发现每个操作摊还代价为O(n)。当我记录集合大小后,每次合并都把小的集合并到大集合中,发现m个操作序列的时间复杂度变为O(m+nlgn)(n为创建集合的次数)不相交集合森林如果集合不相交,我们用根树来表示集合。引入两种启发式策略:1.按秩合并就是把小树的根指向大树的根,来进行集合的合并2.路径压缩

2021-01-15 13:54:51 336

原创 算法基础期末考点总结十七——摊还分析

摊还分析聚合分析n个操作的序列最坏时间复杂度如果是O(n),那么摊还代价就是O(n)/n = O(1)。两个例子:1.栈操作poppushmultipop——pop多个n个操作指的是连续的n个,所以最坏时间复杂度为O(n).2.二进制计数器递增n个递增操作,对每一位的操作数呈等比数列,算出来是O(n)。核算法提高某些操作的代价,减少某些操作的代价,使用信用体系。1.栈操作push的代价变成2,pop和multipop的代价变为0,这样算出的摊还代价是实际代价的上界,因为信用不为负。

2021-01-15 13:54:11 242

原创 算法基础期末考点总结十六——贪心算法

贪心算法和动态规划有所不同,贪心算法适用于全局最优能推出局部最优的问题。我们设计递归算法,而后该为迭代算法。活动选择问题很多个活动,有开始时间和结束时间。我们按照结束时间排序,每次选择最先结束的不冲突的活动,就一定能使得活动数最大。同样的,按照开始时间排序,每次选择最晚开始的不冲突的活动,也能求解。两者答案可能不同。0-1背包问题和分数背包问题明确的一点是,分数背包问题可以用贪心算法求解,0-1背包则不能。赫夫曼编码要引出赫夫曼编码,我们先介绍定长编码。而事实证明,如果构造出来的

2021-01-15 13:49:52 150

原创 算法基础期末考点总结十五——动态规划

我对动态规划这一章的理解,例子太多了。就一章,包括了4个例子,但我觉得矩阵乘法是重点,而且大概率只会求那个数组,这个我通过做题已经掌握了规律,所以这一章我不会讲的太仔细,只会讲一讲数组。动态规划首先,动态规划处理的是什么问题?具有最优子结构的问题。做出一个选择后,问题分解成若干子问题。什么是动态规划?对每个子问题只求解一次。钢条切割问题r是最大化收益,p是价格s是切割的位置矩阵链乘pi pi+1是第i+1个矩阵的规模。m[i,j]是第i个矩阵乘到第j个矩阵最少的乘法次数s是分

2021-01-15 13:48:42 119

原创 算法基础期末考点总结十四——数据结构的扩张

书上讲数据结构的扩张有两个例子:扩张域为秩的选择算法以及扩张域为右区间最大值的区间树算法。选择算法所以找第i小元素的算法:确定元素秩的算法:维护扩张域的算法,在旋转算法里加上:(以左旋为例)区间树扩张的域为int(包括区间的左端点和右端点),max,子树中所有右端点的最大值。维护:检查区间是否有重叠的区间:...

2021-01-15 13:46:51 93 1

原创 算法基础期末考点总结十三——红黑树

性质首先红黑树是二叉搜索树,满足二叉搜索树的所有性质。其次还满足以下五条性质:针对第五条性质,我们有一个专业术语:黑高。这也是红黑树树高控制在lgn量级的原因。红黑树的数据结构相对于二叉搜索树,只是多了一个颜色域,所以中序遍历,查找,最大值,最小值,后继,前驱的算法都没变。变的就是插入和删除。旋转旋转分为左旋和右旋:下面给出左旋的算法伪代码,右旋的和左旋的是对称的。1.x是旋转的中心点,可以说是围绕x旋转的。2.左旋,如图,改变的分别是(按顺序)x的右儿子,y的左儿子的父亲,y的父亲

2021-01-15 13:45:28 197

原创 算法基础期末考点总结十二——二叉搜索树

从这章开始,变得难了起来。性质首先介绍二叉搜索树是什么。二叉搜索树首先是棵树,又因为是二叉树,所以一个节点至多有两个儿子,再因为是搜索树,要方便搜索,所以人为规定,搜索树上节点的左子树所有点小于节点,右子树所有点大于节点。算法如果你要重头自己写一个二叉搜索树算法的话,接下来介绍的顺序便是写代码的顺序。中序遍历图论教过,不再赘述。递归查找三种情况:找到了,在左子树,在右子树。非递归查找大大减少空间复杂度。找最大值利用的二叉搜索树的性质。找最小值找后继3种情况:1.x

2021-01-15 13:37:38 84

原创 算法基础期末考点总结十一——中位数及顺序统计量

中位数和顺序统计量这部分就是在讲,怎么得到一个数组里第i小的元素,中位数也是i=(n+1)/2取下整 和 (n+2)/2取上整 的两个数中的一个或两个(不考虑奇偶性)。极值先考虑极端情况,最大值,最小值怎么找?单单找最大值,或者最小值,要比较n-1次。如果同时找最大值和最小值,那么:如果是奇数个元素排序,先拿出一个,最小值,最大值都是它,再取两个元素,这两个元素进行比较,大的和最大值比较,小的和最小值比较,每扫描两个元素,比较三次,最后比较总次数为3*(n/2取下整)如果是偶数个元素,先拿出两

2021-01-15 13:33:53 146

原创 算法基础期末考点总结十——桶排序

本来上课的时候,老师说桶排序的时间复杂度要记住,但后来助教发的提纲划掉了整个桶排序,所以这里只介绍概念。书上桶排序是排序[0,1]之间的元素,直接上伪代码:上面又有两个数组,A,B。A数组是待排序的数组;B数组的每一个元素都是一个链表,A数组的元素A[i]对应B数组的下标是nA[i]取下整。(这也是为什么B数组下标从0开始)其期望运行时间为O(n)。...

2021-01-15 13:32:46 70

原创 算法基础期末考点总结九——基数排序

基数排序基数排序和计数排序都有局限性,那就是排序元素都得是整数,或者取值空间有限即可。先上算法伪代码:如果k(元素取值空间大小)不大时,上述stable sort常取计数排序。所以算法时间复杂度为Θ(d(n+k))。...

2021-01-15 13:31:49 86

原创 算法基础期末考点总结八——计数排序

在讲计数排序之前,我们先明确一点,基于比较的排序算法,最优时间复杂度为O(nlgn)。计数排序计数排序是运算的排序算法,其时间复杂度不受制约。直接上代码:算法设计三个数组:A,B,C。A,是待排序的数组B,是最后排好序的数组第六行的C,举个例子,C[x] = y,代表的是A数组中,值为x的数有y个第九行的C,举个例子,C[x] = y,代表的是B数组中,数值为x的数排在最后面的位置为y;换一个说法就是,A数组中,数值小于等于x的数有y个。值得考量的细节是第10行j从A.length开始

2021-01-15 13:31:32 89

原创 算法基础期末考点总结七——快速排序

快速排序算法体现分治法的部分:核心部分:用我自己的语言来说,PARTITON算法,将A[r]作为主元,在对数组扫描时,遇到比主元小的,就将其放到前面。(如果你要复述伪代码,在确定i,j的初始值的时候,建议拿个实例先试一试)用循环不变式表示即为:快速排序的另一种形式快速排序,在第二版书里,算法的形式不像第三版这样,而是如下(第10行A[j]应该改为A[i])思想是任取一个主元(算法里取的是第一个元素),假设前半部分都得存小于它的,后半部分都得存大于它的,从两头开始向中间扫描,遇到不符

2021-01-15 13:29:42 158

原创 算法基础期末考点总结六——堆排序

堆堆呢,包括堆排序和优先队列两个应用。堆排序,顾名思义,就是排序算法;优先队列,意思是把优先级高的弹出,主要在cpu处理进程的时候应用。堆分为最大堆和最小堆,最大堆的最大元素,最小堆的最小元素存储在根节点。每个节点至多两个儿子,一个父亲。堆排序堆排序有三个部分的算法:1.维护最大堆当我们确定整个堆只有以i为根节点的子树不满足堆的性质,即可调用MAX-HEAPIFY。(假设以儿子为根节点的子树都已经是最大堆了)整段伪代码的思想就是,我看i,i的左儿子,i的右儿子哪个是最大的,如果是i,就可

2021-01-15 13:27:29 189

原创 算法基础期末考点总结五——递归方程求时间复杂度

这里有三种方法可以从递归方程得到算法的时间复杂度:代入法递归树主方法代入法先知道结果,然后想办法证明结果是对的,这就是代入法。但是有两点需要注意:1.证明的时候,要严格按照渐近符号的定义证明;2.递归式左边后面的n项如果不是n的幂方项式,想办法把他替换成幂方形式会更简单关于第一点,我们遇到待证明的项多出来一部分的时候,可以从假设里减,使得证明成立,如下:(这确实给了我很大的启发)关于代入法,有一道这个知识点最难的题,只要你看懂了,就掌握了。有取上整或者取下整的时候,需要放缩,常常

2021-01-15 13:21:39 511 3

原创 算法基础期末考点总结四——矩阵乘法时间复杂度

这只是一个科普性质的部分,矩阵乘法老师没有细讲,就介绍了一下原理和时间复杂度为多少。这里一个需要了解的概念就是分治法,其包括三个步骤:这也是后面递归式的由来,子问题的时间复杂度和合并问题的时间复杂度构成了递推式(分解问题所需时间一般都是O(1))。额外介绍一个例子:求最大子数组问题。这个问题的应用一般是股票的买进卖出分别在什么时候最好(有点马后炮),书上为了贴合分治法的主题,设计了一种算法:将整个数组分成两块,最大子数组要么在左边,要么在右边,要么跨越两边。这是求跨越两边的最大子数组。这

2021-01-15 13:19:44 5654 1

原创 算法基础期末考点总结三——渐近记号

渐近记号有五个,后两个不考,只提一下概念。1.需要注意的是,渐近记号表示的是一个集合,这个集合包含很多函数。2.前三个记号的图示:3.五种渐近记号的读法:渐近紧确界,渐近上界,渐近下界,渐近小于,渐近大于,类比成数学符号:4.5.不是所有函数都能两两渐近比较...

2021-01-15 13:17:40 363

原创 算法基础期末考点总结二——时间复杂度

这里只是介绍时间复杂度的概念,以最原始的方法分析时间复杂度。举插入排序时间复杂度分析的例子:可得:然后最佳情况,最坏情况,平均情况下,tj项的答案有所不同,我们最后得到的结论是最坏情况和平均情况一致(同个量级)。...

2021-01-15 13:16:49 124

原创 算法基础期末考点总结一——算法正确性

算法正确性证明即循环不变式的证明:因为初始化一般都是循环开始之前就得满足的性质,所以不能拿第一次循环后的结果来初始化。循环不变式怎么找?例1:插入排序的循环不变式先介绍插入排序的伪代码:类似玩扑克的时候,拿到牌后,要把牌从小到大排好,就从左往右,一个一个插到左边已经排好的序列。对于当前要插入的牌,从排好序的序列的最右端开始,一一比较,直到找到比当前排序的牌小的牌,将其插入。那么它的循环不变式就是:在每一次循环开始之前,A[1,…j-1]已经排好序了。例2:归并排序其算法伪代码如下:

2021-01-15 13:16:25 1049

原创 编译原理——从入门到劝退

编译原理成绩:·40%期末考试·25%课程实践·15%平时作业·20%平时测验·思考一个高级语言程序是怎么把输入数据变成计算结果的?·思考为什么不设计直接运行高级语言的机器?·源程序和目标程序·编译程序·翻译程序(解释程序,汇编程序(几乎和机器二进制代码一一对应),......)·编译程序的组成:词法分析,语法分析,语义分析,中间代码生成(前端),代码优化(中端),目标代码生成(后端)·词法分析:字符流——>记号流(记号名+属性值)·语法分析:记号流——>语法树·

2020-10-30 22:37:49 271

空空如也

空空如也

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

TA关注的人

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