亀より速く、鳥より高く。

ITエンジニア&農業手伝いの個人ブログ

【情報処理技術者試験】ハミング符号の解答を検証

ハミング符号の過去問の解答が本当に合っているかの確認と理解のために検証しました。

問題 H30 春 高度 午前1 問1

問題 H30 春 高度 午前1 問1

ステップ1 組合せを洗い出す

問題文中には、X1X2X3P3X4P2P1という並びで書かれていますが、ここはわかりやすく、X1X2X3X4P1P2P3で並べて考えます。

排他的論理和(XOR)が0になるよう、データ4ビットと冗長3ビットの全組合せを書いてみます。X1~X4は単純に組合せです。P1~P3もノートで書いた後にエクセルに打ち込んで問題文に書いている式の通り計算して、0になることを確認しました。

ノートで考えている段階では、例えば2行目のX1~X4 0001 の場合、P1は X1X3X4 001のXORを計算すると1になり、1とP1のXORが0になるのは、P1が1の場合なので、P1=1と求めました。

ステップ2 問題文のハミング符号を解析する

問題文のハミング符号はX1X2X3X4P1P2P3の並びで 1110110 なので、データビットは 1110(青)で、誤りがなければ冗長ビットは 001 になるはずですが、ハミング符号の冗長ビットは 110(赤実線 、赤破線)となっています。

冗長ビット 110 のデータビットは2パターンあります。0110(赤実線)か 0001(赤破線)です。そして、ハミング符号のデータビットと比べると、0110 が1ビットだけ異なっています。なので誤り訂正の結果として使えるデータビットは 0110 となります。なので答えはアで間違いありません。

余談ですが、問題文に1ビットの誤りが存在すると書かれていますが、ハミング符号は2ビットの誤りは訂正できない前提なので、書いてくれているのは救助ですね。

計算で求める場合

どうしたらいいんでしょうね。笑

もっと速い方法もあるかもしれませんが、以下の手順でできます。

再掲:ハミング符号のデータビット 1110、冗長ビット  110

①P1を含む式で誤りを訂正する場合の候補を求める。

1 xor 1 xor 0 xor 1 = 1 ← これを0にするためには、以下3パターン

0 xor 1 xor 0 xor 1 = 0

1 xor 0 xor 0 xor 1 = 0

1 xor 1 xor 1 xor 1 = 0

なので、候補はX1,X3,X4になります。うまく説明できないのですが、この後のP2、P3についての式も、どこか1ビット変更すれば結果が反転します。

②P2を含む式で誤りを訂正する場合の候補を求める。

1 xor 1 xor 0 xor 1 = 1 ← これを0にするためには、以下3パターン

0 xor 1 xor 0 xor 1 = 0

1 xor 0 xor 0 xor 1 = 0

1 xor 1 xor 1 xor 1 = 0

候補はX1,X2,X4になります。

③P3を含む式で誤りを訂正する場合の候補を求める。

1 xor 1 xor 1 xor 0 = 1 ← これを0にするためには、以下3パターン

0 xor 1 xor 1 xor 0 = 0

1 xor 0 xor 1 xor 0 = 0

1 xor 1 xor 0 xor 0 = 0

候補はX1,X2,X3になります。

④①~③より答えを求める。

①~③全てに登場するのは、X1なのでX1の1ビットの誤りを訂正するのが答えになります。

 

以上です。

ハミング符号考えた人はすごいですね。