見出し画像

小学5年生が理解する「誤り訂正符号」(デジタル社会を支えるテクノロジー:誤り訂正符号って何?その6)

 

息子:「ただいまー!!今日も暇だし、パパの仕事の話しの続きを聞いてあげようかな。」

私:「失礼な奴だ。まっいいや。昨日は『繰り返し符号』で多数決の考え方、つまり『多数決論理復号』という方法で誤り訂正ができることを説明した。今日は昨日は話しができなかった『パリティ検査符号』について説明しようかな。」

息子:「そういえば、2ビットの繰り返し符号から考えた同じ数を3回繰り返す3ビットの繰り返し符号の説明はしてくれたけど、1の個数を偶数にした3ビットの符号の『パリティ検査符号』の話しはしなかったね。」

私:「2ビットの『繰り返し符号』は誤りが起きたことが分かるだけの『誤り検出符号』にしかなってないけど、3ビットの『繰り返し符号』は1ビットの誤りが起きたことが分かって、かつ誤りを訂正できる『誤り訂正符号』になるってことを先に言いたかったからなんだ。」

息子:「3ビットの『繰り返し符号』は2ビットまでの誤りが起きていることが分かる『誤り検出符号』でもあるんだよね。」

私:「そう。よく覚えてるね。『パリティ検査符号』は、どんな符号になっているか考えてみよう。3ビットの『パリティ検査符号』は元のデータが00、01、10、および11の時には1の個数が必ず偶数になるように、それぞれ000、011、101、および110にして送ることは覚えてるね。」

息子:「うん、そうだったねー。」

私:「この3ビットの『パリティ検査符号』では、何ビットの誤りが起きたかまで分かるかな?」

息子:「うーん…1ビットだね!」

私:「何で?」

息子:「1ビットの誤りの場合は数が1のビットの個数が奇数になるから誤ったことが分かるけど、2ビットの誤りの時は数が1のビットの個数も偶数になってしまうから誤りが起きたことが分からないから。」

私:「そうだね。この『パリティ検査符号』では2ビットのデータを送れるのに1ビットの誤り検出ができる利点があるという事も既に話したね。この『パリティ検査符号』で送れるもともとのデータのビット数を2ビットよりも多く、3ビット以上にすることを考えてみよう。」

息子:「えっ!そんなことできるの?『繰り返し符号』は、何ビットにでも増やすことできるのはすぐに分かるけど、『パリティ検査符号』は難しそう。」

私:「確かに『繰り返し符号』だとビット数を増やすことはすぐに理解できるけど、元々のデータの個数は1、つまり誤り訂正できるビット数は増えるけど、送れるデータの個数は1ビットのままだから、殆ど利点が無い、無駄が多くて、効率の悪い『誤り訂正符号』なんだ。だから、使われることは無い、と言っても過言ではない。これに対して『パリティ検査符号』は、誤り訂正できるビット数は1個のままだけど元々のデータのビット数を増やせる利点があるんだ。」

息子:「『繰り返し符号』ってダメだね。」

私:「でも、誰でもすぐ最初に考えつく『誤り訂正符号』だし、『誤り訂正符号』ってどういうものなのか理解するには1番簡単な例だよね。タクムだって、なーんだ、という感じになったと思うんだ。そして『パリティ検査符号』と密接な関係に有る、という意味でも大切な『誤り訂正符号』なんだ。」

息子:「そうなの?で、3ビットよりも多くのビット数にするにはどうするの?」

私:「自分で考え出した時に言ったことを思い出せばすぐにできるよ。」

息子:「数が1のビットの個数を偶数個にする…だから…そうか!!元のデータの数が1のビットの個数が偶数の場合は数0を1番前か後ろに付けて、奇数の場合は数1を1番前か後ろに付ければ良いんだね!!それだけだ!!」

私:「そうだね。そういうやり方を『偶パリティ』とも言うんだ。『偶パリティ』に対して『奇パリティ』と言って数1の個数を奇数にするやり方も有るんだけど、数学的には何の利点も無い、悪いやり方なんだ。」

息子:「ふーん。『奇パリティ』でも別に良いと思うけどなぁ。」

私:「そうだな…まず『偶パリティ』は、タクムが『パリティ検査符号』を考え付いた時に数1の個数を偶数にする、と言ったように繰り返し符号の別の拡張を考える時に自然に出てくる考え方だ、ということがある。そして、何よりも『数学的に』と言ったように、『誤り訂正符号』で使う数学の演算規則に従うと『偶パリティ』でないと成り立たないんだ。」

息子:「どういうこと?」

私:「タクムがいつも使う算数では1+1の答えは何?」

息子:「バカにしてんの?これでも小学5年生なんだよ。2だよ。当たり前じゃん!!」

私:「(笑)まぁまぁ、少し話しを聞け!普段、タクムはもちろん日常で使う算数・数学では1+1=2となるかど、『誤り訂正符号』で使う算数・数学では1+1=0なんだ。」

息子:「えっ!?何それ。」

私:「デジタルのところでは1を2進数で表すと001で、7が111となることを知ったよね。この世界だと普通の算数の1+1=2が001+001=010になることは分かるかな?

息子:「…2を2進数で表すと桁が1つ上がって010だったね。」

私「そうそう!1桁目だけ見ると0になってるよね。1桁目だけ見てるイメージと考えると分かりやすいかな?…それよりも、2で割った余りの数とした方が分かりやすいかな?」

息子:「2で割った余りの数の方が分かりやすい。」

私:「そうか。ならばその方が都合が良い。2で割った余りの事を数学の世界では『2の剰余(じょうよ)』と言うんだ。『剰余』を英語では"modulo"『モデュロ』『モジュロ』と言うので、数学では"mod 2"と省略して表すんだ。『2の剰余』だけでなく、『7の剰余』とかももちろんできる。もっとも『誤り訂正符号』では『2の剰余』しか使わないから"mod 2"は省略してしまうんだけどね。」

息子:「ふーん。変な計算。ずいぶんヘンテコな算数…数学を使うんだね。」

私:「そうなんだ。でも、もっと言うと『誤り訂正符号』を知るには、『2の剰余』だけでなく、もっといろいろな変な数学『代数学』を知る必要があるんだ。それが、難しいと思われる1番の原因なんだ。でも『代数学』の全てを知る必要は無くて、『有限体』と言う計算規則を知れば良いだけなんだけど、それだけでもけっこう難しい。」

息子:「えーっ!!ここまできて、そりゃないよ〜…。」

私:「大丈夫!『誤り訂正符号』の研究者にでもなるなら本気で『有限体』の勉強をする必要があるけど、『誤り訂正符号』の考え方、原理を知るのに必要な部分は限られるし、適度に簡単に理解できるから心配無いよ。」

息子:「頼みますよっ!」

私:「今日までで、『繰り返し符号』と『パリティ検査符号』の考え方を理解できたから、次回は別の考え方の『誤り訂正符号』も見てみようか。


いいなと思ったら応援しよう!