引言
01-02: https://blog.yexca.net/archives/184
03-05: https://blog.yexca.net/archives/185
06-10: https://blog.yexca.net/archives/186
11-15: https://blog.yexca.net/archives/189
16-30: https://blog.yexca.net/archives/190
那么关于这篇文章,是我想要挑战一下,也没想着会成功,去参加系统架构师考试,也就是计算机专业技术与软件专业技术资格的高级考试,这个考试拿下来的证和学习到的知识可能大多数编码的时候用不上 (其实能用上只是想不到),但有总比没有好,我尽量可以把这张试卷做完吧,这应该也可以慢慢将我从梦中拉回吧
碎碎念
自己最近两年确实很浑浑噩噩了,以至于现在对于事情的处理方法也受到该状态的很大影响。一直这么下去终究不是办法,既然无法选择,那就尽力做好吧,我想要可以至少我去尝试一下吧,没有尝试的勇气才是最可怕的,这已经让我最近失去了一个机会了,还是应该有些改变或者变化才会比较可以生活得较为真实点,我也确实有时候觉得我活在梦里,倒不是活得好,而是不真实。文字得力量是有限得,事实的经历更具有说服力,尽管可能是虚假的被创造的事实,我开始去相信一些看似很离谱的事情
emm,感觉在写日记似的,まあまあ、就这样吧
引言说到感觉在做梦其实让我想到一个有意思的修仙小说,那个魔宗的人觉得自己是仙人,所在的世界只是一个幻境,自己是过来历练的,我都有时候觉得我被这个设定所影响了。所以不要再说废话了嘛
第一问
ハミング符号とは、データに冗長ビットを付加して、1ビットの誤りを訂正できるようにしたものである。ここでは。$X_1, X_2, X_3, X_4$ の4ビットから成るデータに3ビットの冗長ビット $P_3, P_2, P_1$ を付加したハミング符号 $X_1X_2X_3P_3X_4P_2P_1$ を考える。付加したビット $P_1, P_2, P_3$ は、それぞれ
\[X_1 \oplus X_3 \oplus X_4 \oplus P_1 = 0 \\ X_1 \oplus X_2 \oplus X_4 \oplus P_2 = 0 \\ X_1 \oplus X_2 \oplus X_3 \oplus P_3 = 0\]となるように決める。ここで、$\oplus$ は排他的論理和を表す。
ハミング符号1110011には1ビットの誤りが存在する。誤りビットを訂正したハミング符号はどれか。
ア 0110011
イ 1010011
ウ 1100011
エ 1110111
海明码题目,题目给出了公式,每个位置代入计算异或得
\[X_1 \oplus X_3 \oplus X_4 \oplus P_1 = 1 \\ X_1 \oplus X_2 \oplus X_4 \oplus P_2 = 1 \\ X_1 \oplus X_2 \oplus X_3 \oplus P_3 = 1\]可以得到出错的位置为 $(111)_2$ 即第 7 位,所以正确的数据为 0110011,即选项 ア
看到海明码的时候我只觉得很熟悉,但具体是什么呢我已经完全不记得了,哎,之前到底学了啥捏
海明码可以用于校验数据是否出错,并且进行一位的纠错,以原始数据 1100 为例,变成海明码的过程如下
首先计算校验位的个数,$2^k \ge k + m + 1$ 其中 m 为原始数据的个数,k 为校验位的个数,本例的 k 应为 3,共有三个校验位。校验位只会在 $2^n$ 即 1、2、4、8 ···,所以本例校验位在 1、2、4 位。此处以及以后说的位置一般为从右往左
因为有三位校验位加四位数据,共有七个数,列出其二进制 (校验位 3 位,列出二进制为 3 位)
7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|
111 | 110 | 101 | 100 | 011 | 010 | 001 |
校验位的位置,即 1、2、4 的数字分别对应 001、010、100,即 1 的位置在第一位、第二位、第三位,接下来找出所有位置相同的
校验码位置 | 数字 1 位置 | 码 |
---|---|---|
1 | 第一位,**1 | 1、3、5、7 |
2 | 第二位,*1* | 2、3、6、7 |
4 | 第三位,1** | 4、5、6、7 |
然后根据每一组 (上表一行同一个位置的码为一组) 计算确定校验位的码,需要借助原数据,如下表
位置 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|
数值 | 1 | 1 | 0 | 0 |
因为校验位数值不确定,先空着
第一组数据,根据第 1、3、5、7 位的数字确定,共有 1 个 1,所以补 1 使 1 的个数为偶数
第二组数据,根据第 2、3、6、7 位的数字确定,共有 2 个 1,所以补 0
第三组数据,根据第 4、5、6、7 位的数字确定,共有 2 个 1,所以补 0
所以海明码对应位置如下
位置 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|
数值 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
即数据 1100 的海明码为 1100001,校验方式其实和题目一样,毕竟题目例子也是七位数
校验是怎么确定的呢,把题目中三行公式对应的位置换成从右往左数,可以看到其实就是上面确定校验码时候划分的三个组,所以校验方式也就是确定校验码个数后,再确定各组位置,然后进行异或操作,根据得到的结果 (全是 0 说明数据未改变),从右往左排列,即
···第三组、第二组、第一组
得到的二进制数即数据发生改变的位置,改变数值则得到原来的海明码
参考文章
第二问
リストには、配列で実現する場合とポインタで実現する場合とがある。リストを配列で実現した場合の特徴として、適切なものはどれか。ここで、配列を用いたリストは配列に要素を連続して格納することによってリストを構成し、ポインタを用いたリストは要素と次の要素へのポインタを用いることによってリストを構成するものとする。
ア リストにある実際の要素数にかかわらず、リストに入れられる要素の最大個数に対応した領域を確保し、実際には使用されない領域が発生する可能性がある。
イ リストの中間要素を参照するには、リストの先頭から順番に要素をたどっていくことから、要素数に比例した時間が必要となる。
ウ リストの要素を格納する領域の他に、次の要素を指し示すための領域が別途必要となる。
エ リストへの挿入位置が分かる場合には、リストにある実際の要素数にかかわらず、要素の挿入を一定時間で行うことができる。
这道题目问数组实现的列表有什么特征,除了 ア 都是指针构成列表的特征,答案为选项 ア
问题还是很明显的,选错了就是我看不懂 :cry:,题目翻译如下 (ChatGPT):
列表可以使用数组或指针来实现。使用数组实现列表的特点是什么?在这里,数组实现的列表是通过将元素连续地存储在数组中来构成的,而使用指针的列表是通过使用元素和指向下一个元素的指针来构成的。
ア:无论列表中实际的元素数是多少,都要为列表中可容纳的最大元素个数分配内存空间,可能会出现未使用的空间。
イ:要访问列表中的中间元素,需要从列表的开头开始逐个元素进行遍历,因此需要的时间与元素数量成正比。
ウ:除了存储列表元素的空间外,还需要单独的空间来指向下一个元素。
エ:如果知道插入位置,那么无论列表中实际有多少元素,都可以在固定时间内插入元素。