引言
2022 SA am1
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
這篇文章是我想要挑戰一下,也沒想過會成功,去參加系統架構師考試,也就是電腦專業技術與軟體專業技術資格的高級考試。這項考試取得的證照和學習到的知識,可能大多數在編寫程式時用不上(其實用得上只是想不到),但有總比沒有好。我會盡量把這張試卷做完,這應該也能慢慢將我從夢中拉回吧。
碎碎念
自己最近兩年確實很渾渾噩噩了,以至於現在處理事情的方法也深受該狀態影響。一直這樣下去終究不是辦法,既然無法選擇,那就盡力做好吧。我想要至少嘗試一下,沒有嘗試的勇氣才是最可怕的,這已經讓我最近失去了一個機會。還是應該有些改變或變化,生活才能過得比較真實一點。我也確實有時候覺得我活在夢裡,倒不是活得好,而是不真實。文字的力量是有限的,實際的經歷更具有說服力,儘管可能是虛假被創造出的事實,我開始去相信一些看似很離譜的事情。
嗯,感覺在寫日記似的,算了吧,就這樣吧。
引言提到感覺在做夢,其實讓我想到一部有趣的修仙小說,那個魔宗的人覺得自己是仙人,所在的世界只是一個幻境,自己是過來歷練的。我有時候都覺得被這個設定影響了。所以不要再廢話了嘛
第一問
ハミング符号とは、データに冗長ビットを付加して、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
海明碼(Hamming Code)題目,題目給出了公式,每個位置代入計算互斥或(XOR)得:
$$ 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 為例,轉換為海明碼的過程如下:
首先計算校驗位(Parity bits)的個數,$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 說明資料未改變),從右往左排列,即:
···第三組、第二組、第一組
得到的二進位數即資料發生改變的位置,改變數值則得到原來的海明碼。
參考文章
第二問
リストには、配列で実現する場合とポインタで実現する場合とがある。リストを配列で実現した場合の特徴として、適切なものはどれか。ここで、配列を用いたリストは配列に要素を連続して格納することによってリストを構成し、ポインタを用いたリストは要素と次の要素へのポインタを用いることによってリストを構成するものとする。
ア リストにある実際の要素数にかかわらず、リストに入れられる要素の最大個数に対応した領域を確保し、実際には使用されない領域が発生する可能性がある。
イ リストの中間要素を参照するには、リストの先頭から順番に要素をたどっていくことから、要素数に比例した時間が必要となる。
ウ リストの要素を格納する領域の他に、次の要素を指し示すための領域が別途必要となる。
エ リストへの挿入位置が分かる場合には、リストにある実際の要素数にかかわらず、要素の挿入を一定時間で行うことができる。
這道題目問陣列實現的串列(List)有什麼特徵,除了 ア 以外都是指標構成串列的特徵,答案為選項 ア。
問題還是很明顯的,選錯了就是我看不懂 :cry:,題目翻譯如下(ChatGPT):
串列可以使用陣列或指標來實現。使用陣列實現串列的特點是什麼?在這裡,陣列實現的串列是透過將元素連續地儲存在陣列中來構成的,而使用指標的串列則是透過使用元素和指向下一個元素的指標來構成的。
ア:無論串列中實際的元素數是多少,都要為串列中可容納的最大元素個數分配記憶體空間,可能會出現未使用的空間。
イ:要存取串列中的中間元素,需要從串列的開頭開始逐個元素進行走訪,因此需要的時間與元素數量成正比。
ウ:除了儲存串列元素的空間外,還需要單獨的空間來指向下一個元素。
エ:如果知道插入位置,那麼無論串列中實際有多少元素,都可以在固定時間內插入元素。