かつ丼か、天丼か、それが問題だ
友人と一緒にお昼ご飯を食べる予定のあなた。かつ丼屋でかつ丼を食べるか、天丼屋で天丼を食べるかのどちらかというところまでは前もって決めていました。
さて当日。友人が先に混雑状況を見てお店に入ってもらい、どちらの店なのか携帯に連絡を入れてもらってからあなたが現地で合流することになっています。
しかしお昼時になってもまだ連絡は来ません。どちらの店に行けばいいのか…?お腹が空いてはいるのですが、どちらに向かって出発すればいいのかあなたにはわかりません。
「どっちの店にいったのか、情報をくれ!」あなたの心が叫びます。時間だけが過ぎていきます。
情報の量は「ビット」で測る
このとき、あなたに必要な情報の量はどれくらいでしょうか?それは1ビット。それだけの情報量があれば十分。
情報って何でしょうか?それは、「複数の選択肢のうち、どれが求めるものかを決めるために必要なしるし」です。
このとき、あなたは「かつ丼屋」と「天丼屋」のどちらかに行けばいいことはわかっています。つまり選択肢は2つ。しかしその2つのうちのどちらが求めるものなのかがわかりません。
その不確定な状況を打破するのに必要なしるしは、あなたの友人からの連絡。そしてそこには1ビットの情報さえあればいいのです。
1ビットの表現方法
それでは、その1ビットの情報はどのように表現できるのでしょうか。それは「表現方法は無限」です。仮にあなたの友人は「かつ丼屋」にいるとしましょう。友人は以下のいずれの方法でも、あなたに1ビットの情報を送ることができます:
- LINEで「かつ丼屋」にいるよ」とメッセージを送る。(天丼屋のときは「天丼屋にいるよ」と書くことに前もって決めてある)
- 「かつ丼屋」とだけ送る。(天丼屋のときは「天丼屋」)
- 「か」とだけ送る。(天丼屋のときは「て」)
- 「k」とだけ送る。(天丼屋のときは「t」)
- 「○」とだけ送る。(天丼屋のときは「×」)
- 「○」とだけ送る。(天丼屋のときは「●」)
- 「山」とだけ送る。(天丼屋のときは「川」)
- 「1」とだけ送る。(天丼屋のときは「0」)
日本語の文章や単語で1ビットの情報を送ると無駄が生じているのがおわかりでしょうか。伝えたいのは、「二択のうちどちらなのか」ということだけ。2つの決められた内容のうちのどちらかを送ればいいだけなのですから。
二択のうちのどちらかを指定するならば、記号は2つで十分なのです。2つの記号でできた表現方法といえば、何か思いつきませんか?そう、2進数もそうですね。
プログラムもデータも情報です。情報によって働きを変えることができる機械であるコンピュータは「情報機械」。情報を表現するシンプルで効果的な方法は、2つの記号だけでできている言語ですべての情報を表すことです。そういうわけで、コンピュータでは2進数を使っているのです。(数えるための数としてではなく、情報を書き表す言葉としての2進数です。)
4つの選択肢と2ケタの2進数
さて、あなたと友人の待ち合わせの選択肢を4つに増やしてみましょう。「かつ丼屋」・「天丼屋」・「ラーメン屋」・「そば屋」です。友人が先に入って、あなたを待っています。先ほどは二択でしたが、今は四択です。二択のときよりも多くの情報がないと、求めるものを決めることができません。
それではどのくらいの情報が必要でしょうか?二択のうちの一つを選ぶのに必要なのが1ビットでした。
それでは今回は4ビット?なぜなら
- 最初の二択:「かつ丼屋」かそれ以外か?(これで1ビット)
- 次の二択:「天丼屋」かそれ以外か?(これで1ビット)
- 三番目の二択:「ラーメン屋かそれ以外か?」(これで1ビット)
- 四番目の二択:「そば屋かそれ以外か?」(これで1ビット)
これらの答えがわかれば店がわかるからです。
いえ、そうではありません。もっと少ない情報量でお店がわかるのです。4つの二択ではなく、2つの二択で十分。しかしそのためには、あなたと友人の間で前もって、お店の指定方法を決めておく必ようがあります。
- 「かつ屋」は「0」
- 「天丼屋」は「1」
- 「ラーメン屋」は「2」
- 「そば屋」は「3」
そうすると2つの二択質問でお店がわかるのです。これにもいろんな方法がありますが、例えば
- 最初の二択:「店の番号は2以上か?」
- 次の二択:「店の番号は奇数か?」(0は偶数であるとします。)
この二つの質問への答えがわかれば、お店が特定できることがわかるでしょうか。
四択問題はかならず、二つの二択問題に分解できます。二択問題を解くのに1ビットあれば十分なので、四択問題を解くのに必要な情報は2ビットです。
さて、これが2進数とどう関係があるのでしょうか?
上で取り決めた、お店の番号を2進数で書いてみましょう。
- 「かつ屋」は「0」なので、2進数では「00」
- 「天丼屋」は「1」なので、2進数では「01」
- 「ラーメン屋」は「2」なので、2進数では「10」
- 「そば屋」は「3」なので、2進数では「11」
そうすると、二つの二択問題はこのようになります。
- 最初の二択:「店の番号の最初の桁は1か?」
- 次の二択:「店の番号は次の桁は1か?」
どうでしょうか。いろいろ難しいことを考えなくても、店の番号を2進数で表して、一桁ごとに1か0かを確かめていけばいいですね。そうすると、必要な情報量はその2進数の桁数と一緒。つまり、お店が4つのときには2桁の2進数なので2ビットの情報、というわけです。
プログラミングとコンピュータサイエンス
コンピュータは0と1だけで動いている、というと不思議な気がするようですが、それは上のような考え方で「すべての情報を二択で表す仕組み」になっているからなのです。「1」と「0」という記号にも大きな意味はなく、別に「○と×」、「黒と白」、「陰と陽」でも何でもよいのですが、「1と0」にすると足し算・引き算など数としての操作もできるのでいろいろ便利なのです。
情報を扱うための単純な仕組みを組み合わせて、世の中の様々なサービスを作り上げているこの仕組み。それを考える分野がコンピュータサイエンスです。
最近世の中の注目を浴びているプログラミング。近い将来、小中学校でプログラミング教育は必修化されます。しかし、そこで覚えておいていただきたいのは、プログラミングは、「情報を使って便利なものを作る」や「情報の視点で世界の仕組みを解き明かす」という分野であるコンピュータサイエンスの入口に過ぎないということ。そして、プログラミングを仕事にする人は全員ではないですが、コンピュータサイエンス的な考え方は仕事のいろんな場面で生きてくるということです。
これからも、身近な例を用いて、コンピュータサイエンスの楽しさを伝えていきたいと思います。
ホーム画面に戻るにはここをクリック
関連記事:
- 「コンピュータって何だろう」、かながわグローバルIT研究所、2016年2月16日
- 「不思議な2進数」、かながわグローバルIT研究所、2016年2月16日
- 「小鳥の数と2進数」、かながわグローバルIT研究所、2016年5月20日
参考情報:今回の内容は、1948年にクロード・シャノンが発表した論文から始まった「情報理論」の基礎部分を平易に解説したものです。よい説明があまり世の中にないようなので、自分で書いてみました。参考情報を以下に挙げておきますが、正直言って一般向けではないです。面白いネタはかなグロブログでどんどん解説していきますので、ご安心ください!
(かながわグローバルIT研究所 森岡剛)