コンピュータは 0 と 1 しか持てません。 そこで必要になるのが、ほしいものを 0 と 1 の並びに置き換えるという考え方です。 この回では、何ビットで何通り表せるかから始めて、音や画像を数字にする流れ、 誤りを見つける仕組み、圧縮、そして処理時間の見積り方(オーダー記法)までを扱います。
出典:基本情報技術者試験 シラバス Ver9.2 大分類1 基礎理論/中分類1 基礎理論/3. 情報に関する理論
(1)情報理論
情報量の概念,事象の生起確率と情報量との関係を理解する。
(2)符号理論
アナログとデジタルの特徴,量子化,標本化,A/D 変換などの符号化,符号化の目的,情報伝送における信頼性,効率性,安全性の向上などの効果を理解する。
n ビットで 2 の n 乗通り
1桁の2進数(1ビット)で表せるのは 0 と 1 の2通りです。桁を1つ増やすと、 それぞれに 0 と 1 が付くので2倍になります。
1 ビット 2 通り (0, 1) 2 ビット 4 通り (00, 01, 10, 11) 3 ビット 8 通り (000 〜 111) 8 ビット 256 通り (2 を 8 回かけた数)
n ビットで 2 の n 乗通り。逆に「1000種類を表したい」なら、2 の 10 乗=1024 なので 10 ビット必要です。
文字コードも色の指定も、この数え方でビット数が決まります。 1文字を8ビットで表せば256種類、16ビットなら65,536種類です。
情報量 ── 珍しい知らせほど大きい
「表か裏か」を伝えるには1ビットあれば足ります。では「8通りのうちどれか」なら3ビットです。 何通りを区別できたかが、そのまま知らせの大きさになります。これが情報量で、単位はビットです。
確率と情報量
確率 1/2(コインの表) … 2通りの区別なので 1 ビット
確率 1/8(8面のうち1つ) … 8通りの区別なので 3 ビット
確率 1/1024 … 1024 通りなので 10 ビット
起こる確率が小さいほど、その知らせの情報量は大きくなります。 「2分の1のくじに当たった」より「1024分の1のくじに当たった」のほうが、驚きも情報量も大きい、という扱いです。 確率 p のときの情報量は 2 を何回かけると 1/p になるかで、log を使って log₂(1/p) と書きます。
練習
40 種類の記号に、それぞれ違う2進数を割り当てます。最低で何ビット必要ですか。
アナログをデジタルにする ── 標本化・量子化・符号化
音や温度は、なめらかに変化するアナログの量です。 これを 0 と 1 にするには、3つの段階を踏みます。
アナログの波を、0 と 1 の並びに直す(A/D 変換)
1一定の間隔で値を読む(標本化)
0
1
2
3
4
5
6
7
2いちばん近い段に丸める(量子化)
0
1
2
3
4
5
6
7
3
5
6
4
2
3段の番号を2進数にする(符号化)
011
101
110
100
010
赤い点が読み取った値、緑の棒が丸めたあとの段です。点と棒の頭のずれが、丸めたことで失われた分(量子化誤差)にあたります。
3段階の役割
標本化 … 時間を区切る。1秒間に何回読むかが標本化周波数
量子化 … 値を区切る。段階を何ビットで表すかが量子化ビット数(8ビットなら 256 段階)
符号化 … 区切った結果を2進数の並びにする
どちらをどこまで細かくするかが、音質とファイルサイズの釣り合いです。
誤りを見つける ── パリティ
送る途中で 0 と 1 が化けることがあります。そこで、確かめ用の1桁を足して送ります。
送るデータ 1 0 1 1 0 0 1 1 の個数は 4 個=偶数 パリティ 0 偶数のままにしたいので 0 を付ける 送る並び 1 0 1 1 0 0 1 0 受け取った 1 0 1 0 0 0 1 0 1 の個数が 3 個=奇数 → 誤りがある
1 の個数を偶数に保つのが偶数パリティ。1桁の誤りは見つかりますが、どの桁かは分かりませんし、2桁同時に化けると見逃します。
パリティのように見つけるだけの仕組みを誤り検出、 どの桁が化けたかまで特定して直せる仕組みを誤り訂正といいます。 訂正には、より多くの確かめ用の桁が必要です。
練習
偶数パリティを付けて送ったとき、誤りを見逃してしまうのはどれですか。
圧縮 ── よく出るものを短くする
すべての文字を同じ長さで表すと、よく出る文字も珍しい文字も同じビット数を使います。 よく出る文字を短くすれば、全体は短くなります。この考え方がハフマン符号です。
| 文字 | 出てくる回数 | 割り当てる符号 | 回数 × 長さ |
|---|---|---|---|
| A | 50 回 | 0(1ビット) | 50 ビット |
| B | 30 回 | 10(2ビット) | 60 ビット |
| C | 20 回 | 11(2ビット) | 40 ビット |
| 合計 | 100 回 | — | 150 ビット |
| すべて2ビットなら | 100 回 | 00・01・10 | 200 ビット |
同じ100文字が 150 ビットで送れました。すべて2ビットにすると200ビットなので、4分の1短くなっています。 よく出る A を1ビットにできたぶんが、そのまま効いています。
符号は途中で区切りが分かるように選びます。 かりに A を 0、B を 01、C を 1 と割り当てると、 受け取った 01 が B なのか A・C なのか決まりません。
どの符号も、ほかの符号の先頭にならないように選びます。 上の割り当てでは、A に 0 を渡したので、残りはすべて 1 で始まる側(10 と 11)に置けます。 こうすると衝突が起きず、区切り記号なしで読めます。
練習
同じ割り当て(A=0、B=10、C=11)で、A が70回・B が20回・C が10回出てくる100文字を送ります。合計は何ビットですか。
文字コード
文字も番号で表します。どの文字に何番を割り当てるかの取り決めが文字コードです。
名前と、覚える点
ASCII コード … 英数字と記号。7ビット(128種類)が基本
JIS コード・シフトJIS コード・EUC … 日本語を表すための方式。同じ文字でも番号が違う
Unicode … 世界の文字を1つの体系にまとめたもの(国際規格としての名前が UCS)
⚠️ 同じ日本語でも方式ごとに番号が違うので、送る側と受け取る側で方式が食い違うと文字化けします。
計算量 ── データが増えたとき、どれだけ遅くなるか
処理の速さは、データが増えたときの伸び方で表します。この表し方がオーダー記法です。
| オーダー | データが10倍になると | 例 |
|---|---|---|
| O(1) | 変わらない | 配列の要素番号を指定して取り出す |
| O(log n) | 3〜4回ぶん増えるだけ(100万件でも20回) | 2分探索 |
| O(n) | 10倍になる | 先頭から順に全部見る |
| O(n²) | 100倍になる | 総当たりで2つずつ比べる |
オーダーが見ているのは「何秒かかるか」ではなく「データが増えたときに何倍になるか」です。 どの解き方が速いかは、この伸び方の違いで決まります。 探索や整列それぞれのオーダーは、アルゴリズムを扱う第2章でまとめて見ます。
先に、ひとつ予想してみましょう
データの件数が増えたとき、処理時間がいちばん急に増えるのはどれですか。
まとめ
この回で持ち帰ること
1. n ビットで 2 の n 乗通り。必要なビット数は「2 を何回かければ足りるか」で決まる
2. A/D 変換は 標本化(時間を区切る)→ 量子化(値を区切る)→ 符号化
3. パリティは誤り検出。1桁の誤りは見つかるが、直せないし2桁は見逃す
4. ハフマン符号はよく出るものを短く。ほかの符号の先頭にならないように割り当てる
5. オーダー記法はデータが増えたときの伸び方。O(1) → O(log n) → O(n) → O(n²) の順に急になる
次に読む
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例(4通りを2ビットで表す、音声の標本化、パリティ、ハフマン符号の木、探索の回数)と練習問題は、すべて当サイトが説明のために作ったものです。

