直接插入排序和快速排序
时间复杂度
直接插入适合已经排序很多的
原码反码补码范围
十进制小数转二进制小数
IEEE
单精度 1+8+23
双精度 1+11+52\
大
41 二叉排序树算法-中序遍历是升序的 是二叉排序树
递归调用左子树 中间节点 递归调用右子树
用递归方式 框架如下
int inorder(BTNode *p){
if(p==null) return xx;
inorder(p->lchild);
对p节点处理
inorder(p->rchild);
return xx;
}
指针-> 结构体 .
不是排序树的三种情况
- 左子树不是二叉排序树
- 中间权值< 前驱
- 右子树不是二叉排序树
pre->bt->SqBiTNode[i] 访问当前节点
pre=bt->SqBiTNode[i]
如果当前节点的数组下标i,则左孩子下标为2i+1;右孩子下标为2i+2
pre保存当前节点的前驱节点的权值,如果当前节点的值>前驱节点,说明中序遍历得到的不是升序,
42 排序 找前十个小数
简单选择排序 :每次把最小的放在最终位置
不断地从未排序的元素中选择最大(或最小)的元素,放入到已排好序的元素集合中,直到未排序的元素为空。
插入排序 排好的顺序 插入进去
堆排序 大小顶堆
时间复杂度O(n)和空间复杂度O(1)
另 冒泡排序: 两两交换
43 书写简洁
加法溢出
A+B=F
正+正=负
负+负=正
减法溢出
负-正=负
正-负=负
-
Y 缓存alu输入端 Z 缓存alu输出端数据
-
通用寄存器个数=2^n(寄存器位数) rs rd来自IR指令寄存器
rd连接地址译码器 01 10\ -
PC->MAR M(MAR)=>MDR 访存 MDR->IR 1+5+1 第一步一个周期,第二步五个周期(题目已知),第三步一个周期
-
控制信号由CU控制部件产生
明显看到IR连接到CU
FR也连接到CU,因为当CPU溢出上报给CU
44题
- 磁道盘面扇区
四个双面盘片,那就是四×2个盘面。八个盘面log 8就等于三盘面,应该是三位。 每个盘面有20000个磁道,每个磁道有500个扇区, log 500
-
平均存取时间=寻道时间+延迟时间(旋转半周的时间)+传输时间
寻道时间给出
延迟时间:(1/2)R/转速 --------------这个R最后是单位 ms/R\2分之一转的时间
传输时间:(1/扇区数)*R/转速\
n分之一转的时间 本题1/500
结果保留一到两位小数 1/500忽略不计 不计算
转数(转每分)=化成转每秒=化成转每ms 注意单位
计算注意: 512b÷64比特每次得到的结果就是64次。我计算写式子的时候一般会写上单位,这样可以方便我们检查很多同学这里64位,他会忘记要先把它转换成字节。因为我会把单位进行一个约分。64位。前面的b和后面的比特约分,那是不是还要除以一个八才行
(3) 总共需要传输的数据位数除以每次请求的数据位数
dma控制器当然可以获得总线使用权。dma和CPU同时请求的时候。dma的优先级是更高的,所以可以得到总线使用权 如果不优先响应dma请求会怎么样?因为dma是设备发过来的。设备往缓冲区里放数据。当缓冲去买的时候dma就会发出请求,如果我们不及时响应这个请求的话,接下来可能又会有新的数据。放到数据缓冲区中。就会导致之前的数据丢失,所以我们需要及时的响应DNA请求。而CPU请求没有那么紧急。
所以我们作答就是,如果不优先响应dma的请求,有可能造成数据丢失。
45
我们讨论一个文件的读写过程的时候。首先要从磁盘中找到这个文件的索引节点,然后再根据索引节点找到我们需要读写的磁盘块。
(1)stu是目录文件,它需要保存它下属的文件信息, 包括文件名以及索引节点号,
(2)它们两个指向的是同一个文件, 可以把它视为一种硬链接。如果是软链接的话,它们的索引节点号是不一样的。
软链接类似于Windows系统中的快捷方式,它存储的是目标文件的路径,而不是文件本身的数据。这意味着如果目标文件被移动、重命名或删除,软链接将会失效。
硬链接直接指向文件的数据所在的位置,而不是文件名。多个硬链接实际上是共享同一存储空间的文件名,它们具有相同的inode号。
(3)第一次读磁盘找到索引节点,第二次访问数据。
直接地址项用完,如果还不够,那再用一级。还不够再用二级。不够再用三级,那我们一级一级的找。 直接地址项 索引节点号是10, 能够表示10个磁盘块, 每个磁盘块大小为4kb, 就是10×4 KB=40kb <6MB
一级间接地址项指向一个索引块, 一个索引块中能有多少个地址呢, 一个块是4 KB, 一个地址大小是4b,所以 4 KB除以4b能表示4KB/4b=1024个块 ,110244kB=4MB <6MB
二级间接地址项11024^24kB=4GB >6MB
问间接地址项:
所以答用一级和二级间接地址项
46 pv类题 五类型题
题目中说有两个线程。这两个线程分别执行aef和bcd,那我们把这两种颜色都涂出来。然后这个图反映了执行的约束条件。那接下来我们怎么确定同步信号量呢?比如说对于c和d来说,它们两个需要信号量来约束吗?不需要,
因为是在同一个线程内的。然后对于a和c来说呢。它们在不同的线程内。如果a没有执行完的话,那c是不是也执行不了?所以它涉及到两个线程的沟通问题,那这样的话,我们可以找到所有的边。然后看一下它的两端是不是连着是两种不同的颜色?那这道题我们是不是可以找到两条这样的边?其他的都是连的相同的颜色。所以这里我们就需要有两个信号量,一个信号量只是a是否完成了另一个信号量,只是c是否完成了?然后我们来书写代码,
我一般会把同步信号量以及互斥信号量都列出来,这样更清晰。书写信号量的时候,最好加上注释,也就是这里。先写线程t1t1,首先需要执行a操作执行a。执行完a操作之后,我们是不是应该要提供BA?表示我的a操作已经执行完了。接下来,我们要执行操作一执行操作一之前需要等待t2线程的c操作已经执行完,所以这里我们需要PC。执行完一操作就可以接着执行f操作,那就是执行f。
然后我们书写t2也是一样t2,需要先执行b操作执行b。然后我们下一步需要执行c操作,在执行c操作之前,我们要先等待t1的a已经执行完,所以我们这里要PA。然后执行c操作。执行完c操作,是不是应该告诉对方,我已经执行完c操作了,所以这里就BC。接下来,执行低操作。书写完之后,我们还应该检查代码。
首先a和c的初值都是零,说明他们没有执行。然后t1中告诉对方a已经执行。需要对方告知c有没有执行?完。t2中告诉对方c已经执行,然后需要对方告知a有没有执行。完。这些都有。然后检查所有的约束关系是不是都已经满足?最后再确定我们的代码