- 博客(53)
- 收藏
- 关注
原创 操作系统————FCFS(先来先服务),优先级调度,SJF(短作业优先调度),RR(时间片轮转调度)四大算法的c++代码实现
RR算法较为灵活,时间片的大小我们可以自己指定,比较函数按照进程到达时间排序,我们给每个进程记录剩余执行时间和执行标记,roundRobin函数部分我们分两种情况讨论,第一种是剩余时间大于一个时间片,此时我们就不能计算完成时间,让时间线继续往后走,第二种就是剩余执行时间小于一个时间片,此时进程就可以执行完毕,我们也可以计算完成时间,周转时间等。SJF算法与前两种算法不同的是会发生抢占,我们在结构体中设置一个bool型标记,标记进程状态,这样被抢占的进程还会被重新调度。
2025-05-21 11:06:45
995
原创 操作系统————四种动态分区分配算法详解(首次适应,最坏适应,最佳适应,邻近适应)
假设此时又有一个进程6需要5MB的空间,那么上次结束的位置是2号空闲分区,我们直接往后查找到10MB的空闲分区发现满足条件直接分配,这样指针移动的次数是1次。首次适应算法有一部分最佳适应算法的优点,而邻近适应算法包含了最坏适应算法的缺点,所以不能说邻近适应算法比一定首次适应算法好。我们假设现在内存有三个空闲分区,大小分别是20MB,10MB,4MB如上图所示。按容量递增的顺序就可以保证找出的分区是最合适的,不会太大造成空间的浪费。我们还是以上面的例子分析,按照容量递减的顺序排列空闲分区。
2025-05-20 22:31:08
1023
原创 计算机组成原理———CPU指令周期精讲
间址周期数据流,间址周期说明当前要执行的指令采用的是间接寻址的方式,指令所需要的操作数的地址保存在指令的地址码部分,起始操作可以从MDR或者IR开始,把地址码部分送给MAR进行内存单元的访问,MAR把地址送到地址总线通过地址总线送给存储器,CU把信号送到控制总线,再由控制总线送到存储器,存储器执行读操作把数据送到数据总线,这个数据实际上是操作数所在内存单元的地址,这个地址送到MDR中,这个时候MDR就真正保存了操作数所在内存单元的地址。比如乘法操作的时钟周期比较复杂,相应的执行周期就比较长。
2025-05-12 21:54:13
697
原创 cache计算专题大精讲————九大题型配套小编人机化解法,想不会都不行!!!
下面我们看一道题目:这道题的第三小问就是题型1的类型,在正式计算之前我们还要给出两个公式这两个公式实际上本质是一样的,相当于物理当中的量纲统一,要用字节数都用字节数计算,要用字数都用字数计算下面我们给出解析:第一步:求cache的块数,因为容量是以KB形式给出的,所以我们用字节计算cache块数=4KB/(1632)=64块第二步:题目中给出cache块号是第五块,我们求出了cache总块数,代入公式计算j=5,n=64.现在求有多少个ii的取值可以为5(k=0),5+64(k=1),5+6
2025-05-11 17:41:52
709
原创 java集合框架day1————集合体系介绍
2>提供了一系列方便操作对象的方法:add,remove,set,get等。<3>使用集合添加,删除新元素的示意代码,简洁明了。<1>可以动态保存任意多个对象,使用方便。为了方便读者理解,我们来看一下实例代码。下面我们来看一下java的集合框架图。增加/删除元素的代码比较麻烦。,而且一旦指定,不能更改。
2025-04-21 21:52:29
370
原创 计算机组成原理—————计算机运算方法精讲<3>反码及移码的表示
这就要说到移码的作用了,移码主要的用途是表示浮点数的阶码,而阶码没有小数只有整数,所以移码只给出了整数的定义。
2025-04-16 21:32:20
648
原创 计算机组成原理————计算机运算方法精讲<2>补码精讲及两个关于补码的秒杀大法
对于真值0.1110,它的原码是0.1110,正数补码是本身不变,对于-0.1110我们可以知道原码1.1110然后利用秒杀技,最后的10照抄,小数点后的两个1取反,就可以直接得到补码1.0010,是不是非常好用呢?我们由1011变为0000可以通过减去自身得到,也可以加上0101来实现,加上0101的结果是10000,但由于计数器只有4位(16=2的4次),所以。我们可以在数值位前面加上符号位来表示,0表示正数,1表示负数,那么我们如何实现符号位的变化呢?,所以我们可以模(pow(2,4+1))
2025-04-14 22:22:32
705
原创 Mysql从入门到精通day5————子查询精讲
这里我们使用之前的文章已经创建过的图书借阅表和图书信息表,先查看两表中的图书id部分,结果如下图:下面的语句的意思是通过in关键字从图书借阅表中查询图书id,前提条件是这个id在图书信息表也出现过,然后返回图书id,图书名,作者,价格可以看出上图中的图书信息表中的id有4个,但是查询记录只有三条即两表的公共部分如图,内层查询两表的公共id外层返回查询到的记录为了使读者更直观了解比较运算符查询我们新建了两个表为图书归还表和管理员信息表然后我们插入数据包含姓名,年龄,部门查看插入的结果使用
2025-03-31 21:09:31
564
原创 计算机组成原理————计算机运算方法精讲<1>原码表示法
原码是机器数中最简单的一种表示形式,符号位为0表示正数,符号位为1表示负数,数值位是真值的绝对值,所以原码又称为带符号的绝对值表示。为了区别整数和小数,约定整数的符号位与数值位之间用逗号隔开;小数的符号位与数值位之间用小数点隔开我们都知道不管是原码还是补码他们都是机器数,是机器数就一定会受到硬件的限制即位数的限制,所以多余的位会自动舍去,这对我们后续理解补码非常重要,不指定字长的机器数是没有意义的。
2025-03-30 21:46:20
1200
原创 Mysql从入门到精通day4———触发器的神奇你真的懂吗?
触发器是由SOL的基本命令事件来触发某种事件的特定操作的,这些基本的命令由INSERT(插入),DELETE(删除),UPDATE(修改)等事件来触发某些特定操作,满足触发器的触发条件时,数据库系统就会自动执行触发器中定义的程序语句使操作间的一致性得到协调。
2025-03-27 09:41:04
505
原创 计算机组成原理———I\O系统精讲<1>
既可完成I/O通道要完成的I\O控制又可以完成码制变换,格式处理,数据块检错,纠错等操作。(2)输入输出过程穿插在CPU执行程序过程中进行,当I\O设备与主机交换信息时,CPU不得不停止各种运算,因此,,而不用再通过CPU,使CPU在I\O设备与主存交换信息时能继续完成自身的工作,资源利用率得到了进一步的提高。(3)每个I\O设备的逻辑控制电路与CPU的控制器构成不可分割的整体,彼此相互牵连,相互依赖,因此。,用来实现I\O设备与主机之间的信息交换,因此线路十分散乱,庞杂。,故提高了CPU的资源利用率。
2025-03-25 22:21:22
1048
原创 Mysql从入门到精通day3————记一次连接查询的武装渗透
*总结:左连接,左对右,左没右,右加NULL;右连接,右对左,右没左,左加NULL;简单点说就是左连接能列出左边关系所有的元组,右连接能列出右边关系所有的元组,我们的例子中左连接列出了借阅表(左表)的所有元组,而外连接列出了信息表(右表)的所有元组(我们要查询的列)**
2025-03-24 21:27:04
964
原创 计算机网络精讲day2———计算机网络的性能指标(下)
表示这样的链路可以容纳多少个比特,我们从量纲的角度考虑,时延的单位是秒,带宽的单位是比特每秒,两者相乘的量纲就是比特也就是时延带宽积的单位,我们假设链路的传播时延是20ms,带宽为10Mbit/s,则可以算出。这就表明,若发送端连续发送数据,则在发送的第一个比特即将到达终点时,发送端就已经发送了20万个比特,而这20万个比特都在链路上向前移动,因此链路的时延带宽积又称为以比特为单位的链路长度。发送时间=(数据长度)/(发送速率)=100乘pow(2,20)乘8/100乘pow(10,6)=8.39s。
2025-03-23 13:15:20
877
原创 计算机网络精讲day1——计算机网络的性能指标(上)
概念1:比特英文全称是binary digit,意思是一个二进制数字,因此一个比特就是二进制数字中的1或0,比特也是信息论中使用的信息量单位。概念2:速率网络中的速率指的是数据的传送速率,也称为数据率或比特率,是网络中最重要的一个性能指标,单位是bit/s(比特每秒),也可以写成b/s或bps。重点1:高数据率的单位转换其中1尧比特等于10的24次方比特,其余表格中每行的大单位都等于同一行小单位的10的3次方倍,依次类推比如4*pow(10,10)bit/s我们就可以记作40Gbit/s我们在生活中
2025-03-21 22:17:28
1263
原创 十四届蓝桥杯省赛真题解析(中)————E,F,G题讲解
这道题的本质是线性DP,我们观察发现下一个数的第一位和上一个数的最后一位是相同的,所以我们可以取出当前数的第一位X和最后一位Y,然后我们规定DP[i]就是以i为数字最后一位的最长接龙数列长度,那么只会存在DP[0]到DP[9],而我们如果选择当前数字接入队列,那么由于上一个数字的结尾也为X,状态转移方程就可以写为DP[x]+1即长度加1,如果不选当前数字,那么就还是以Y结尾状态就还是DP[i],所以状态转移方程就为。下期预告:H,I,J题讲解。
2025-03-16 22:47:27
723
原创 交互式调度算法学不会?————一文学懂(RR(时间片轮转调度算法),优先级调度算法,多级反馈队列调度算法)保姆式解析
那么有没有一种算法可以综合他们的优点呢?由此我们引入多级反馈队列调度算法。
2025-03-14 22:34:33
1250
原创 操作系统学不会?————一文速通(FCFS,SJF/SPF,SRTN,HRRN算法)保姆级解析
2时刻p2到达,p2运行4ms,运行时间小于p1剩余的5ms,于是抢占处理机,4时刻p3到达,p3运行1ms小于p1剩余的5ms和p2剩余的2ms,于是抢占处理机,到达5时刻。
2025-03-13 18:11:14
602
1
原创 干货分享————人机化快速排序算法
注意本道题的规模已经达到了1e5我们采用冒泡,选择,排序都会超时只能采用快排或者归并,也可以使用sort函数,这里我们采用快排的方法。
2025-03-13 10:38:12
318
原创 数据结构你真的学懂了吗————312植树节带你学懂神奇的01Trie树
01Trie树是一种二叉树,也是一种特殊的字典树,每个叶子结点对应一个二进制数,通过根出发到该叶子节点的路径来存储数据并进行查询操作,深度小的表示高位,深度大的表示低位。
2025-03-12 23:41:04
1259
原创 逆天寻祖算法———倍增法求LCA(最近公共祖先)模板分享
本质上是一个dp,类似于之前讲过的ST表,fa[i][j]表示i号节点,往上走2的j次方所到的结点,当dep[i]-pow(2,j)>=1时fa[i][j]有效(假设根节点深度为1)这个fa数组可以用dfs实现,我们看下面例子:由此我们可以得到fa数组的状态转移方程:然后我们采用贪心的思想,查询LCA(x,y)时,假设X深度更深,然后从大到小枚举j,当fa[x][j]的深度不超过y的深度时,x才能往上跳,也就是说要让x往上跳,但是不能超过y,又要尽可能接近y,跳到两者的深度相等即dep[x]=dep[y]
2025-03-11 21:48:15
656
原创 算法分享———进制转换通用算法
我们采用一个求数位和函数来分别求二进制下和四进制下的数位和,再枚举1到2024中的所有数,如果在二进制和四进制下数位和相等,计数器加1。先将N进制转10进制,再将10进制转m进制,套用模板1和模板2。
2025-03-11 08:36:28
375
原创 素数你真的会筛吗————神奇的欧拉筛法
我们只需要利用欧拉筛法找出所有的素数并且保证素数的一半也是素数,然后我们用一个bool型数组维护,满足条件返回1,否则为0,表示好数个数,最后利用前缀和求出区间中的好数个数即可。1我们不考虑,2是质数放入primes中,然后2跟primes里的数相乘,即2乘2=4,筛掉4,2是4的因子停下,直接枚举下一个i,下一个i=3,3是质数放入primes中,然后2乘3=6,不用管,然后枚举6,筛掉12,枚举7,加入primes,然后筛掉14,枚举8筛掉16,由于。必要时int要换成long long。
2025-03-10 17:28:00
734
原创 简单又好上分的算法———前缀和妙解四道算法题
那么我需要的是搬到每一个可能的位置num的费用,然后求出它们的最小值 而搬到位置num的费用=前面的石头搬到该位置的费用(pex)+后面的石头搬到该位置的费用(nex) 前面的石头搬到该位置的费用=前面的石头搬到前一个位置的费用+前面石头的总质量*前一个位置与后一个位置的位移,,以此类推(我需要两个列表分别存储pre与nex)如果统计L和Q的个数会很麻烦,为此我们采用一种巧妙的方式,将L和Q用一对相反数来表示,如果某一段区间和为0,则这段区间就为平衡串,然后我们再枚举所有平衡串,找出最长的即可。
2025-03-09 21:43:59
1158
原创 算法分享——迪杰斯特拉的堆优化版本
迪杰斯特拉算法是一种高效的处理非负边权的“单源最短路”问题的算法,即存在一个源点,让我们求出所有点到源点的最短距离,是图论中最重要的算法,需要注意的是,弗洛伊德算法可以看成由多个源点构成的迪杰斯特拉算法。1.算法的基本思想是贪心,即由于我们每次更新距离的时候都是和之前的路径比较过才将点入队的,所以同一个点不可能走两次,即第一次走得到的时候得到的距离一定是最短距离。1.int d[N];准备一个整型数组,d[i]表示点i距离源点的最短距离。4.定义结点结构体,按照边权降序,在优先队列中边权最小的作为堆顶。
2025-03-05 11:51:23
786
原创 算法分享——一文搞懂Kruskal算法
我们的基本模板还是不发生变化,与第一类问题不同的是,我们不再记录最大边权,而是用sum记录路径的长度,cnt记录点的个数,我们都知道最小生成树的边数等于顶点数减1且所有点连通,所以我们用cnt判断,cnt初始值为0,如果到达n-1我们就输出路径长度,否则图不连通,执行相应操作。与普里姆算法不同,它的时间复杂度为O(eloge)(e为网中的边数),所以,适合于求边稀疏的图的最小生成树。2.MST的最大边权是所有生成树中最小的,这也是Kruskal算法的贪心原理,即保证每次找到的边都是剩余较大边中最小的一个。
2025-03-04 13:01:56
880
原创 Mysql从入门到精通day2————数据表操作
如图,我们选择wangjiahui2数据库,在tb_admin数据表中,增加email字段,并修改user字段类型为varchar(40)再用desc查看表结构发现已经改变。在wangjiahui2数据库中创建tb_admin数据表,其中包含id,user,password,createtime等字段(列)如图所示,我们修改tb_admin表的名称为guangjun1并且查看表结构发现同原来的表结构一致。如图我们查看(一)中创建好的tb_admin结构,显示有4列。5.添加主键,删除主键,添加唯一索引。
2025-03-03 09:36:05
745
原创 算法精讲——一文速通KMP算法解决字符串模式匹配问题
S[i]时,j不会移动到1重新开始匹配,而是移动到nex[j]=3继续匹配,则接下来i=6,j=3,有P[j+1]=S[i],成功匹配,则i,j继续后移,直到i=8,j=6完成一次匹配,P在S中第一次出现的位置为i-j+1=3。KMP算法是一种字符串匹配算法,用于匹配模式串P在文本串S中出现的所有位置,例如S=‘ababac’,P=‘aba’,那么出现的所有位置是是1,3。1.做好准备工作,定义好模式串数组,文本串数组,next数组。将原本的O(n2)的匹配算法的复杂度降低成O(n)
2025-02-27 21:51:35
636
原创 Mysql从入门到精通day1————数据库基本操作
如图所示,我们已经创建过一个小写的wangjiahui2的数据库,我们用大写检查是否存在同名数据库,发现存在,我们可以看出出现了warning的警告,此时系统发现同名数据库,不再创建同名数据库。:把performanca_schema的复杂度降低,使DBA(数据库管理员)能更好的阅读库里的内容,让DBA更好的了解DB(数据库)的运行情况。:存储服务器中所有数据库的信息,如数据库名,数据库表,访问权限,数据库表数据类型,数据库索引信息。格式:CREATE DATABASE 要创建的数据库名称。
2025-02-27 20:17:09
1374
原创 数据库精讲<1>——关系数据库的规范化
第二范式的关键是每个实体(记录行)可以被唯一的区分,即实体的属性完全依赖于主关键字,即不能存在仅依赖于关键字一部分的属性,如果存在那么该属性和主关键字的这一部分应该被分离出来形成一个新的实体,新实体与原实体是一对多的关系。员工编码是关键字段,部门编码是非关键字段,部门经理也是非关键字段,但是部门编码又能决定部门经理,即部门经理和员工编码存在传递函数依赖,所以不满足第三范式,但是满足第二范式。(员工编码,岗位)———>(决定)(姓名,年龄,学历,基本工资,绩效工资,奖金)
2025-02-25 13:10:26
713
原创 算法分享———并查集巧解图的连通性问题
如图所示,7找根时会去找5的根,5找根时会去找1的根,1会去找3的根,3找根时发现指向自己即自己就是根所以直接返回3,3就是根,同理4找2,2指向自己,即2就是根,最后发现4的根是2,7的根是3,根不同说明4和7不连通,这就是并查集的原理,通过判断根是否相同来判断图是否连通,读者可深入体会。在并查集中,所有的操作都在根上,假如我要使得x和y两个点合并,只需要将root(x)指向root(y),或使得root(y)指向root(x)..找根的方法:如果当前点不是根,就返回父亲的根,否则就是自己。
2025-02-24 19:09:30
706
原创 算法分享——树形DP之最大独立集问题
最大独立集问题就是求出树中不相关联的最大的顶点集合,基本转移方程是不选父节点,子节点可选可不选,选了父节点则不能选子节点,基本实现策略是深度优先遍历进行计算。最大独立集包含的点数为7。
2025-02-23 22:00:09
178
原创 算法分享——LCS模型及其应用
图中即为一条回溯路径,从右下角开始,行标为j,列标为i,如果a[i]==b[j]走对角,否则往左或者往上(取两个方向的较大值)走,注意回溯在dp数组进行,但是vector容器中存放的是A和B中的元素,由于是回溯得到的序列所以输出要采用reverse逆向容器反转以后输出的才是公共子序列。在求解LCS时,设dp[i][j]表示A[1~i]序列和B[1~j]序列中(不规定结尾)的最长公共子序列的长度,其状态转移方程为。题目通常为给定两个公共子序列A和B,求他们的最长公共子序列。
2025-02-23 21:58:51
260
原创 算法分享——弗洛伊德算法暴力破解多源最短路问题
由于需要循环来遍历中转点,起点和终点所以需要使用三层循环,时间复杂都是O(n3),复杂度很高,所以通常用来处理n<=500即图中的点的数量小于500的情况,这也是使用弗洛伊德算法的一个提示。我们只需要准备一个二维动态,规划数组dp[i][j]表示考虑到当前情况从点i到点j的最短距离,然后给数组初始化为无穷再不断更新最短距离。//无向图的初始化,w为两点间的边权。2.需要注意自己到自己的距离始终为0,初始化要注意dp[i][i]=0。1到2的最短距离是1,1到3的最短距离是3,2到3的最短距离是2。
2025-02-23 21:54:06
536
原创 操作系统考研真题的C++代码实现——CPU的闲置率
cout << "P2:" << "计算" << p2time1 << "ms" <<"\t" << "I/O操作" << p2io << "ms" <<"\t" << "计算" << p2time2 << "ms" << endl;cout << "P1:" << "计算" << p1time1 << "ms"<<"\t" << "I/O操作" << p1io << "ms" << "\t"<<"计算" << p1time2 << "ms" << endl;
2025-02-23 11:44:23
1210
原创 计算机组成原理———存储器精讲<12>高速缓冲存储器(1)
命中率与cache的容量和块长有关,块不能太大也不能太小,块太大cache内的总块数就会变少,如果大的块中只有一部分信息对CPU有用就会浪费其他的空间,块也不能太小,否则存储信息过少还得从主存当中调取命中率也会降低,一般来讲cache的容量与命中率呈正相关。读操作上面已介绍过,下面来看写操作,读操作中cache与主存的信息是一致的,写操作可能会导致不一致。缓存共有C块,主存共有M块,主存块的数量大于缓存,且主存的容量也要远大于缓存,所以M远大于C,即主存中的块只有部分被缓存到了cache当中而不是全部。
2025-02-19 21:33:10
914
原创 操作系统精讲4——记录型信号量解决(读者—写者问题)
读者1先上处理机,在执行读文件之前已经执行了P(W),V(W)操作所以W的值没变还是1,然后写者1执行P(W),W的值变为0,由于读者1已经执行了P(rw)但是并没有执行V(rw)所以rw的值为0,写者1会被阻塞在P(rw),此时读者2上处理机,由于W==0,所以读者2会被阻塞在P(W),因此写者1和读者2都被阻塞,当读者1读完后会执行V(rw)唤醒写者1,写者1结束后执行V(W)唤醒读者2。写进程执行时W的值为0,读进程会被阻塞在P(W),直到写进程结束释放W,读进程才能被唤醒,所以读写可以互斥访问。
2025-02-18 21:01:25
1379
2
原创 操作系统精讲3——信号量机制实现进程同步,进程互斥以及前驱关系
我们来简要分析一下,P1进程上处理机,即S1先执行,如果此时切换到进程2,执行P(a),而a的初值为0,所以P2进程阻塞,S2无法执行,只有当S1执行完,执行V(a)操作,a的值变为1,S2才能运行,S3同理,但是S2,S3是互不影响的,因为他们由a,b两个独立的信号量控制,而a,b的值又是由进程P1控制的。如上图所示,如果P1先使用处理机执行代码1,代码2,然后执行V操作,释放资源,S的值变为1,然后P2再使用处理机,先执行P操作,S为1不会被阻塞,然后执行代码4。下面再来看一下进程同步的实现。
2025-02-17 22:21:20
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人