
データのまちがいは、どうやって見つけるの?
0と1が一つ入れ替わっても、見張り役の数字があれば気づける? 偶数の約束と、たてよこの手がかりを試してみよう。

まず、ひとことで
元のデータに確認用の情報を足すと、約束が崩れた場所を探せる。ただし、見つけられるまちがいには条件と限界があるよ。
数字が届いても、正しいとは限らない
友だちから「明日は三時」という手紙が来たとする。でも途中で数字が変わって「明日は八時」になっていたら、文章として読めても困るよね。コンピューターでも、データが保存されたり運ばれたりする途中で、値が変わることがある。
ここではデータを、0か1が書かれたカードの列で考えよう。この一つ分の情報をビットというよ。送った列が1011なのに、受け取った列が1001だったら、一か所が変わっている。どちらも0と1だけでできているので、見ただけでは間違いと分からないね。
そこで、もとの情報とは別に、確認用の情報を足す。「どんな列でもよい」から「決めた約束を満たす列だけが正しい」へ変えるんだ。受け取った列が約束から外れていたら、途中に何かあったと気づけるよ。
1の数を、偶数にそろえよう
試しに、確認用のビットを最後に一つ付けて、列全体の1の数を偶数にすると決めよう。偶数は二つずつ組にして余らない数で、0、2、4、6などだよ。0個も偶数として扱うんだ。
データが1011なら、1は三つある。確認用に1を足して10111にすれば、1は四つになる。データが1001なら、1は二つなので、確認用は0でよい。こうして付ける見張り役を「パリティビット」というよ。
10111のうち一つだけ値が反転すると、1の数は必ず一つ増えるか減る。偶数が奇数になるので、約束が崩れたと分かるんだ。最後の確認用ビット自体が反転した場合でも、一つだけの反転なら同じように気づけるよ。
最後の黄色い数字が確認用ビット。どこか一つだけ0と1が反転する例だよ。1の数が奇数になったことは分かるけれど、この列だけでは場所を決められない。
出典資料に基づきEggplanetが作成した模式図気づけることと、直せることは別
受け取った列の1が奇数だったら、何かが変わったと考えられる。でも、どのカードを戻すべきかな。一つ直せば偶数になる場所は、いくつもある。確認用ビットが一つだけでは、間違いの場所までは決められないんだ。
間違いが起きたことを見つけるのが「誤り検出」。正しいデータへ直すのが「誤り訂正」だよ。検出できる仕組みが、いつも訂正までできるとは限らない。分からないときに適当に直すと、新しい間違いを作ってしまう。
別の方法として、送り手にもう一度送ってもらうことも考えられるね。ただし、再送に時間がかかったり、元の情報を送り直せなかったりする場面もある。どんな間違いを想定し、やり取りに何ができるかで、必要な仕組みが変わるよ。
たてとよこ、二つの見張りを合わせる
今度はカードを四角く並べよう。各行の右端に一枚ずつ足して、行ごとの1の数を偶数にする。次に各列の下にも一枚ずつ足して、列ごとの1の数も偶数にする。右下のカードまで含めて、全部の行と列をそろえるんだ。
この表の一枚だけを反転させると、そのカードのある行と列だけが奇数になる。変になった行を横に、変になった列を縦にたどってみよう。二本が交わる場所が、反転したカードだよ。一枚だけ変わったという条件があるので、場所を決められるんだ。
地図で道の名前を二つ聞くと、交差点が分かることに似ているね。ただし本物のデータは道を歩いているわけではない。複数の確認結果を組み合わせ、候補を一つに絞るというところが、このたとえの共通点だよ。
右下の確認用カードも忘れないでね。一番下の行を偶数にする値と、一番右の列を偶数にする値は一致する。内側の1を、行から数えても列から数えても総数は同じだからだよ。確認用の端まで含めると、端の一枚が変わった場合も交差点で探せるんだ。
右端と下端は確認用。元は全部の行と列で1が偶数個あり、一枚だけ反転した設定だよ。複数の間違いを必ず直せるという図ではないよ。
出典資料に基づきEggplanetが作成した模式図二つ、四つ変わったらどうなる?
一列だけを偶数にする仕組みでは、二つのビットが反転すると、1の数が偶数のままになる。二つ増えても、二つ減っても、一つずつ増減しても偶数だね。「約束を満たしている」だけでは、絶対に正しいとまでは言えないんだ。
たてよこの確認も万能ではない。長方形の四つの角にあるカードを反転させると、それぞれの行と列では二枚ずつ変わる。どの行と列も偶数のままなので、この仕組みでは見逃してしまうよ。表の形を描くと、この限界も確かめられる。
だから、「どんな場合なら見つけられるか」を説明することが大切なんだ。複数の反転が起きたかもしれないのに、一枚だけの方法で無理に直してはいけない。実際の機器では、想定する間違いに合わせて、もっと複雑な確認の約束も使われているよ。
ここで調べたのは、カードの位置と枚数は変わらず、値だけが反転する間違いだよ。カードが一枚なくなる場合や、順番が入れ替わる場合には、別の約束も必要になる。どんな失敗に備えているかを最初に決めることも、仕組みづくりの一部なんだ。
確認のための情報は、むだなの?
元のデータが九枚で、たてよこの確認用に七枚を足したら、全部で十六枚になる。これは三行三列に一行と一列を足す、紙上の例だよ。情報を増やすので、送ったり保存したりする量は大きくなる。
でも、その余分な分のおかげで、九枚だけでは得られなかった手がかりを受け取れるね。圧縮が繰り返した説明を減らす工夫なら、誤りに備える符号化は、確かめるための情報を意図して足す工夫だと考えられる。どちらも目的のある設計なんだ。
増やす量と、見つけたり直したりできる間違いの範囲には関係がある。たくさん足せばよいと単純には決められない。使える時間や容量も考えながら、どれくらいの備えを持たせるか選ぶんだよ。確認用の情報にも、ちゃんと仕事があるね。
どっとと考えよう:見張り役になれる?
紙に三行三列の0と1を書き、右と下に確認用の数字を足して四行四列にしよう。すべての行と列で、1の数が偶数になったか確かめる。友だちには、見ていない間に一か所だけ数字を反転してもらおう。紙の上なら、何度でも安全に試せるよ。
奇数になった行と列を見つけ、交差する数字を戻してみてね。そのあと、最初の表と本当に一致したか比べよう。確認の約束だけを見る検査と、元のデータそのものを比べる検査は別なので、両方を試すと仕組みがよく分かる。
最後に、四つの角を反転する例も作ろう。見張りをすり抜けたら実験は失敗なのかな。そうではなく、どこまで使える仕組みかを発見できたんだ。「いつ成功するか」と「どんなとき失敗するか」を両方説明できたら、立派な設計者の考え方だよ。

ことばのメモ
- ビット
- 0か1の二つの値で表す、一つ分の情報。
- パリティビット
- 1の個数が決めた偶奇になるように付ける確認用のビット。
- 誤り検出
- データが変わったことを、確認用の約束などで見つけること。
- 誤り訂正
- 手がかりを使って、変わったデータを元の値へ直すこと。
もとになった資料・もっと知りたい人へ
下記の資料をもとに、説明と考える問題を独自に構成しています。外部資料には英語のページもあります。どっとの画像は案内用のイラストで、観測写真や科学的な図ではありません。
分かりやすくするために、説明を短くしたり、たとえ話を使ったりしています。まちがいを見つけたらお問い合わせへお寄せください。制作方法は編集方針、いっしょに読むときのヒントは保護者・先生へで紹介しています。