- 博客(50)
- 收藏
- 关注
原创 02计算机组成原理-32位立即数与寻址
26 位只是形式地址的字段长度(指令里存储的原始数据),而 MIPS 的内存地址是 32 位(CPU 能访问的地址空间是 32 位),所以整个寻址过程的最终目标,就是把 “26 位形式地址” 和 “PC+4 的高 4 位” 组合成完整的 32 位有效地址——26 位是 “原料”,32 位是 “成品”。有的同学可能直接写成这样了,但事实上这个+1是加的一条指令的长度,而这里一条指令长度为32位,按字节编址,也就是说8位一个地址,那就说明跨过了4个地址,所以真正的下一条指令的地址是0x0000 0008。
2026-02-11 22:30:15
648
原创 02计算机组成原理-指令格式
然后每五位就是一个操作数,第一个五位就是第一个源操作数25-21(由于是源操作数是放在寄存器里面的,这五位就存放的是第一个源操作数的寄存器对应的二进制的地址,后同),第二个五位就是第二个源操作数20-16,第三个五位是目标操作数,还剩下五位就是用来存放位移量的,如果有移位指令就会用这五个位置,对加法操作来说没有移位操作那就写0就可以了。这一革命性的设计使得计算机能够在无需硬件改动的情况下,仅通过改变存储在内存中的程序就可实现不同的计算任务,从而释放了计算机的巨大潜力,为现代信息技术的发展奠定了基础。
2026-02-08 22:53:46
968
原创 02计算机组成原理-逻辑运算符与字符表示
来做一道例题巩固一下上堂博客学的:十进制的数-66,按其补码的形式存放在一个8位的寄存器中,问该寄存器的内容是?-66我们可以看成-(64+2),所以-66的原码是:1100 0010,由于是负数,我们对负数的补码操作是原码的符号位不变,其余数值位取反加1得:1011 11101011=1+2+8=B(十六进制下)1110=E,所以应该是BEH。
2026-02-07 22:04:13
957
原创 02计算机组成原理-有符号数和无符号数
那也就是说计算机里硬件一次性处理的数据的位数是固定的,假设某一个处理加法的硬件一次性处理硬件的位数是4位,那现在有两个4位的无符号数相加,我们看这么一个例子,1111(15)+0001(1)—>结果确实10000,这个算出来的前提是这个处理加法的硬件一次性只能处理的位数是4位,超过4位,这个硬件会把前面的位数直接丢弃了,就变成了0000(0)。在原码加减运算中,对于两个不同符号数的加法(或同符号数的减法),先要比较两个数的绝对值大小,然后用绝对值大的数减去绝对值小的数,最后还要为结果选择合适的符号。
2026-02-06 22:09:51
971
8
原创 02计算机组成原理-计算机硬件的操作及操作数
以下是我们这一章大概要学的内容:通过之前的学习,我们大概知道,指令就是用来控制计算机大致做什么操作的计算机能做的操作大部分都是一些运算的操作比如说一些加减乘除,一些逻辑运算。那既然要进行运算操作,那就得有一些数据参与进来进行操作,所以在我们讲指令格式之前,先把指令能够操作的操作数先给大家讲一下,比如说指令参与某一个操作的一些数据哪来的,逻辑运算用哪些运算,算术运算用哪些,小数怎么表示,正负数怎么表示,“”前面就是指令中的操作数的有关内容怎么处理字符。这一章除了理解指令还要理解存储程序的思想。
2026-02-03 21:27:57
756
原创 02计算机组成原理-计算机的性能
来看下面这个例子:现在有三个任务,每个任务从开始到完成需要2秒,我们用6秒中的时间来完成这3个任务,采取并发的思想,在第一秒内我开始执行任务1,二秒内我开始执行任务2,三秒内我开始执行任务3,在第四秒内我又执行任务1,系统对任务1的响应时间是4秒,它不会管你中间是否做了其他任务,只关注从开始到结束一共用了多久,进而导致响应时间下降了。我们作为普通用户我们关心的是响应时间,相应时间内各个硬件的工作快慢我们不可见也不太关心,我们主要关心整体时间,但是对于计算机的设计者来说,那么我们就得去关心计算机硬件的效率。
2026-01-29 22:28:41
877
原创 02计算机组成原理-计算机硬件组成
显示器:I/O设备中的输出了,就是给我们呈现出画面的东西。一般显示器我们用的是LCD液晶显示。最开始的显示器是没有触摸功能的,随着时代的发展,我们已经不满足于用鼠标或者键盘和计算机交互了,后面我们就想能不能直接触摸操作,所以后来就出现了触摸屏。触摸屏:平板电脑和智能手机则是使用了触摸屏代替键盘鼠标。屏幕本身是玻璃,触摸屏技术本质上就是在这个玻璃上覆盖一层透明的导体,不影响视线,因为人是微导体,可以通过电流,当手指触摸到导体就会产生微小电流从而导致电容发生变化,所以手机识别到了操作。
2026-01-26 23:12:13
633
原创 02计算机组成原理-计算机概述
我们公认的世界上第一台计算机是ENIAC计算机,这是用来军事使用的,这个时期的计算机是电子管计算机,因为是电子管计算机所以说做的比较庞大,一台电脑可能有一个房子那么大,但存储空间少得可怜,且运行时间久了,散热没处理好容易炸。最早这个计算机运行的时候程序和运算是分开的,你想要计算机干事就得给他下指令(程序),程序是放在外部电路里面的,所以当你想要计算机计算的时候需要人工去接电路,这个过程是很耗时的,等到接完之后,可能几分钟就算完了,这样问题就出现了,下达指令的时间太长了。
2026-01-19 22:52:31
622
原创 01数据结构-串和KMP算法
串是由0个或多个字符组成的有序序列。串中字符的个数称为串的长度,含有0个元素的串叫空串。在C语言中,可以用如下语句定义一个名为str的串。C语言定义了’\0’作为字符串的技术标志,但在描述串的长度时,需要通过扫描整个串才获得,时间复杂度为O(N),不如额外定义一个变量专门来存储串的长度,这样求串的长度的时间复杂度为O©的操作了。不同的编程语言,是否用’\0’作为串的结束标语,是没有定论的,可以通过length来约束空间的长度也会更通用。
2025-09-19 17:25:57
880
原创 01数据结构-Floyd
之前咱们讲图的最短路径的算法的时候,咱们用的Dijkstra算法,他是单源点且路径不能是负数,例如:我们知道成都到达州的最短距离,但不能知道郑州到北京的最短距离,实际上我们可以对图中的每个顶点都使用Dijkstra算法,这样虽然也能求,但是显得比较麻烦,今天咱们来学习图中的另外一种算法Floyd算法(也和咱们的的动态规划有关)
2025-09-17 17:03:29
620
原创 01数据结构-01背包问题
当我们要在背包容量为2的情况下放入物品id1的时候,我们要么不放入1,此时最优结果F(0,2)是图中橙色区域对应部分,要么放入1,此时最优结果是放入1后1的价值加上背包容量减去1的重量的背包容量作为F()的参数,即F(0,0)图中绿色部分,明显0+10>6,所以此时我们填写的是10。如图,同理当背包容量为0的时候,1号和2号物品也放不进去,当背包容量为1的时候,此时我们可以有两种选择,一种是选择不放1,那么最优值是F(0,1),如果放入物品2,发现物品2重2放不进去,我们取最优解,肯定是F(0,1)。
2025-09-14 18:44:20
1055
原创 01数据结构-初探动态规划
在学习动态规划时切忌望文生义,因为其名字与其思想关系不大,你可以自己想一个记住其思想的名字,例如:递推公式法,状态转移方程法等等。与其说动态规划是一个算法,还不如说是解决问题的方法论,动态规划的一般形式就是求最优值,比如最长公共子序列,最大子段和,最优二叉搜索树等等。
2025-09-13 16:04:31
1063
原创 01数据结构-B树练习及B+树特点
在B树中的一个节点中的数据包含数据,key和指针域,通常我们认为这会使得节点内存放的数据量会变少,我们知道一个B树中的一个节点就是一次磁盘IO,假设一个节点能存512个字节数,我们数据一般都会占大头,假设一个数据中的数据,key和指针域占有256个字节,这样一个节点仅可以存放2个数据量,这样树的高度显得没有那么“矮胖”,这有点违背B树设计的初衷。这个重复出现的元素充当的是“路标”或“分隔符”的关键角色。2.依次将关键字5,6,9,13,8,2,12,15插入初始为空的4阶B树后,根节点中包含的关键字是()
2025-09-12 14:34:05
948
原创 01数据结构-B树
磁盘的物理结构你可以理解为一个一个磁道(类似于操场跑道一样),每个磁道,我们都有一个轴,这个轴可以伸长,我们读一个磁道的时候会有一个扇面,如图我们称为block(块),意味着,磁盘中的“地址”不像内存那样是连续的地址,而是一个块号,在磁盘中有个磁盘控制器,当操作系统请求读取一个逻辑块,磁盘控制器定位到该块对应的起始扇区,读取这个扇区及后续连续的几个扇区,将数据整合后返回给操作系统。而这一块就不是一个字节了,我们大部分都认为这个块的字节大小是512B。
2025-09-10 16:03:14
1366
原创 01数据结构-红黑树
我们来回顾一下搜索树的“进化过程”二叉搜索树的特性,二叉树,左子树的值小于根节点的值,右子树的值大于根节点的值,中序遍历的情况下是有序的序列,缺点是在特殊情况下,树可能会退化成单链表平衡二叉树的特性:二叉树,左子树的值小于根节点的值,右子树的值大于根节点的值,中序遍历的情况下是有序的序列,树的高度可控,优点是静态特性最优,树一旦构建完成,查找时,效率最高,缺点是动态特性稍差,插入,删除节点时平衡因子容易失衡,需要频繁进行旋转操作。
2025-09-01 20:52:26
845
原创 01数据结构-查找
在一堆数据中,找某一个特定的数据就是查找。查找分找到和没找到,如果我们是顺序存储的数据元素,找到了的话一般就返回该元素的索引取值范围可以是[0,n-1],没有找到的话就返回-1,但是这样有一个小问题,负数的表示既要表示数字又要表示符号,我们返回的范围就变少了,所以很多时候真正存储的时候我们索引的取值范围为[1,n],返回的时候返回0。如果是链式存储,找到了我们就返回节点首地址,没找到我们就返回NULL。
2025-08-27 10:12:55
593
原创 01数据结构-归并排序和计数排序
归并排序,其排序的实现思想是先将所有的记录分开,然后两两合并,在合并的过程中将其排好序,最终得到一个完整的序列。由于使用到的递归思想,我个人认为也可以叫递归排序。归并排序非常适合大数据排序,大部分数据都在磁盘上,我们可以用归并排序拆分,我们拆成可以在内存中保存的n个有序区间,往回写到硬盘里,再进行合并这几个有序序列的时候工作量就变小了。
2025-08-23 17:25:30
1064
原创 01数据结构-交换排序
算法思想冒泡排序是最简单的排序算法了。冒泡排序通过不断地比较两个相邻元素,将较大的元素交换到右边(升序),从而实现排序。那我们直接看例子。我们对数组 [5,1,4,2,8,4] ,采用冒泡排序进行排序,注意这里的两个 4 的颜色是不同的,主要是为了区分两个不同的 4 ,进而解释冒泡排序算法的稳定性问题。第一轮冒泡排序:第一步:比较 5 和 1 ,5 > 1,则交换 5 和 1 的位置:第二步,比较 5 和 4,5 > 4,交换 5 和 4 的位置:第三步:比较 5 和 2 ,5 > 2,交换 5
2025-08-18 18:23:20
841
原创 01数据结构-插入排序
我们前面讲的都是数据的结构,我们数据有很多元素,那这么多的元素我们该如何去组织呢?线性结构还是非线性结构呢?组织完数据中的元素后我们需要对这些元素做一定的处理,主要的处理方案就是排序,查找。
2025-08-17 19:17:21
1174
原创 01数据结构-拓扑排序
如图2,我们用邻接表来存图,创建一个一维数组表示顶点的入度值,初始化时所有的入度值都为0,在遍历邻接表的时侯,例如0能出到1,2,3,就给顶点1,2,3的入度加1。1能到2,4就给2,4顶点的入度加1,一直到遍历完所有顶点,就算时把这个图的所有顶点的初始时的入度值计算好了。例如:一个项目包括A,B,C,D四个子部分来完成,并且A依赖于B和D,C依赖于D,现在要指定一个计划,写出A,B,C,D的执行顺序,这时就可以用到拓扑排序,它就是用来确定事务发生的顺序的。重复上述操作,一直处理完所有的顶点。
2025-08-15 11:46:22
828
原创 01数据结构-最短路径Dijkstra
今天我们主要看一个最短路径算法,迪杰斯特拉算法(Dijkstra Algorithm)。这个算法的主要运用就是计算从某个源点开始到其他顶点的最短路径的算法。什么是最短路径,什么又是源点,还有最短路径算法有什么用呢?我们来一个一个的看基础概念Dijkstra算法是荷兰计算机科学家艾兹赫尔·迪杰斯特拉于1956年提出的单源最短路径算法,用于解决带权有向图或无向图中从起点到所有其他节点的最短路径问题,核心思想是贪心策略,逐步扩展最短路径树。
2025-08-14 12:23:15
796
原创 01数据结构-Prim算法
Prim算法在找最小生成树的时候,将顶点分为两类,一类是在查找的过程中已经包含在生成树中的顶点(假设为A类),剩下的另一类为B类。对于给定的连通图,起始状态全部顶点都为B类。在找最小生成树时,选定任意一个顶点作为起始点,并将之从B类移至A类;然后找出B类中到A类中的顶点之间权值最小的顶点,将之从B类移至A类,如此重复,直到B类中没有顶点为止。所走过的顶点和边就是该连通图的最小生成树。(简单对比一下:上一节课的Kruskal是找边,这几棵的Prim算法是找顶点。
2025-08-13 12:26:05
1269
原创 01数据结构-Kruskal算法
在含有n个顶点的连通图中选择n-1条边,构成一颗极小的连通子图,并使该连通子图中n-1条边上的权值之和达到最小,则称其为连通网的最小生成树一个连通网的生成树是一个极小的连通子图,它包含图中全部的n个顶点,但只有构成一棵树的n-1条边连通图和它对应的生成树,可以用于解决实际生活中的问题:假设A,B,C和D4座城市,为了方便生产生活,要为这4座城市建立通信,对于4个城市来讲,本着节约经费的原则,只需要建立3个通信路线即可,如图1右边。
2025-08-12 12:28:12
915
原创 01数据结构-十字链表和多重邻接表
邻接矩阵:很全面包括带权/无权,有向/无向都使用,但是对于顶点较多边很少的稀疏图来讲,空间利用率低。所以人们提出了邻接表邻接表:主要用于存有向图,正邻接表计算出度简单,但计算入度难,逆邻接表计算入度简单,但计算出度难,要想计算入度出度都简单,人们就把正邻接表和逆邻接表结合起来了,就有了我们今天讲的十字链表十字链表:主要用于存有向图,计算出度,入度简单,代码量可能会多一点。
2025-08-11 19:20:59
1279
原创 01数据结构-图的邻接表的深搜和广搜代码实现
邻接表的存储逻辑在《01数据结构-图的概念和图的存储结构》链接:中有详细介绍,这里放一张简单的图。图1。
2025-08-10 12:12:26
936
原创 01数据结构-图的邻接矩阵和遍历
中的参数,第一个传的是哪一个图,第二个传的是一个字符串数组用于初始化MatrixVertex中的char *show,第三个传的是约束实际的顶点数量,第四个传的是是否有向,第五个传的是每条边的权重,写了一个数组来存已经访问过的顶点,由于类似于树的先序遍历,所以函数进来就要访问,然后把传入的顶点设为已被访问,进入for循环从0号顶点一直遍历到graph->nodeNum,判断有哪个顶点与他右边并且未被访问,如果找到进入递归,一直递到第一次传入的顶点v找遍graph->nodeNum这么多顶点,退出递归函数。
2025-08-09 19:17:02
725
原创 01数据结构-图的概念和图的存储结构
在线性表中,每个元素之间只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间是层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。但这仅仅都只是一对一,一对多的简单模型,如果要描述多对多的复杂关系就需要图数据结构了。
2025-08-08 19:15:59
960
原创 01数据结构-哈夫曼树
如图4我们先从第9号元素开始填充表,先遍历前8个节点的weight找到数据中weight最小的两个元素A,G,让他们构建一个父节点,这个父节点的权值为两个数据的出现次数之和,再感觉构建出来的填写对应的parent,lchild,rchild,在构建9这个父节点的时候我们再遍历前八个元素,填写节点信息,此处应该把A和G的parent改为9,9的权值改为8,lchild改为7,rchild改为1(我们通常把出现次数少的放左边),parent我们暂定为0,,9后构建完成后,我们继续构建10号节点。
2025-08-07 19:22:28
1201
原创 01数据结构-并查集
树的基本查找我们已经讲完了,后面高阶搜索树我们后面再说,先来看树的两个应用,一个是并查集,一个是哈夫曼树,今天呢我们先讲并查集。并查集是一种非常精巧而实用的树形数据结构,他主要是处理一些不相交集合的合并和查询的问题。不相交集合,顾名思义,就是两个集合的交集为空集的一些集合。比如1,3,5和2,4,6,他俩的交集为空集。就是不相交集合。像2,3,5和1,3,5就不是不相交集合。使用并查集时,首先会存在一组不相交的动态集合 S={S1, S2,⋯,Sk},一般都会使用一个整数表示集合中的一个元素。
2025-08-06 18:21:08
1067
原创 01数据结构-平衡二叉树
前面我们介绍了二叉查找树,假设我们最开始送进去的序列就是有序的,那么会造成树往一边倒,如图1,树退化成了单链表,此时查找效率跟我们没有树的时候效率是一样的。那怎么在二叉搜索树的基础上让我们的高度可控,这就是我们今天增加的约束,增加完这个约束后就是我们今天讲的二叉平衡树。图1。
2025-08-05 10:37:14
1064
原创 01数据结构-时间复杂度和空间复杂度
⼀般来说,解决问题的⽅法不⽌⼀种。我们需要学习如何⽐较不同算法的性能,并选择最佳算法来解决特定的问题。⼀个算法的好坏,我们可以从时间和空间两个维度去衡量。执⾏时间越短,占⽤内存空间越⼩的算法,我们认为是更优的算法。并且,⼀般分为两个阶段,⼀是算法完成前的理论分析,⼆是算法完成后实际分析。「理论分析」:这种算法的效率分析是通过假设所有其他因素,如处理器的速度等是恒定的,对算法的实现没有影响。
2025-08-03 21:31:24
977
原创 01数据结构-二叉搜索树
二叉搜索树是在前面二叉树的基础上又增加了几个约束条件,没有约束的树对我们来说没有什么意义。不能解决什么问题,只能解决存储行为,为了解决进一步的需求,人们又在二叉树的基础上增加了几个规则约束。这棵树我们在工程中很少会用到,但是我们后面讲的很多树例如平衡树,红黑树。都是以这棵树为基础。大家可以看一下这个网址,里面包含了我们一些常规的难理解的一些算法的动图:链接:如果他的左子树不空,则左子树上所有结点的值均小于它的根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
2025-08-03 20:09:29
975
原创 01数据结构-二叉树的线索化及实现
如图1:现有一棵结点数目为n的二叉树,采用二叉链表的形式存储,对于每个结点均有指向左右孩子的两个指针域。结点为n的二叉树一共有n-1条有效分支路径。那么,则二叉链表中存在2n - ( n-1 ) = n + 1个 空指针域那么,这些空指针造成了空间浪费。图1当对二叉树进行中序遍历时可以得到二叉树的中序序列。如图所示二叉树的中序遍历结果为DBEAC,可以得知A的前驱结点为E,后继结点为C。
2025-08-01 19:06:04
1128
原创 01数据结构-二叉树的深度广度遍历
上节课我们学习了深度遍历和广度遍历的逻辑,这节课我们来学习一下代码怎么写,并补充非递归实现深度遍历的方法。建议结合上节课的逻辑自己实现一遍代码。
2025-07-31 19:36:55
718
原创 01数据结构-二叉树的深搜和广搜概念及逻辑分析
所以这个时候就遇到了一个矛盾,处理节点的逻辑太慢了,发现节点的逻辑很快,因为当发现一个新任务的时候,往下再处理新的任务会遇到两个任务,但我们只能一次处理一个。,A的左边都是A的左子树的节点,A的右边都是右子树的节点,也就是说如果我们能在先序确定一个根,那么再根据中序遍历我们就能确定以这个根为根节点这棵树,A看完确定左右后我们再来看先序遍历中的B,发现如果以B为根节点中序遍历中在B和A之间,D和C只在B的右边,B左边为空,在图6中B的左边确实为空,依次类推,我们可以得出一个结论,进入子函数1的第四句话。
2025-07-30 22:02:10
983
原创 01数据结构-树及树的存储
从今天开始学习树,研究数据结构我们是从两方面来研究的,一是逻辑结构,一是存储结构,在逻辑关系中当元素比是1:1时,我们研究的时表结构,从今天开始元素间的关系比时1:n时,即任意一个元素往后看有n后继元素,而这n个后继元素的只有一个前驱,这种结构在物理社会中叫层级结构,比如电脑的C盘下的哪个文件,这种目录结构叫做目录树,这种层级结构就叫树。树在存储的时候也有顺序存储和链式存储两种方式。
2025-07-30 12:19:23
1136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅