整数0から15までの16種類を、全て同じ長さの2進数で符号化する。必要な最小ビット数を次から選べ。
- 0
3ビット
- 1
4ビット
- 2
8ビット
- 3
15ビット
解答・解説を確認
正解1.4ビット
解説
N種類を固定長で表すには2n≧Nとなる最小のnビットが必要です。0を含む16種類は0000~1111の4ビットでちょうど表せます。
- 出典
- オリジナル
TERM GUIDE · DIGITAL
符号化(エンコード)とは、文字・数値・音声・画像などの情報を、決められた規則に従って、別の記号や数値の並びに変換することです。
コンピュータでは、情報を最終的に0と1の組合せで表すため、情報をビット列に変換する符号化が広く利用されています。
例えば、次のように曜日を3ビットの2進数で表すことができます。
| 曜日 | 符号 |
|---|---|
| 月曜日 | 000 |
| 火曜日 | 001 |
| 水曜日 | 010 |
| 木曜日 | 011 |
| 金曜日 | 100 |
| 土曜日 | 101 |
| 日曜日 | 110 |
ここでは、曜日と3ビットの符号を対応させる規則を決めています。この規則を共有していれば、符号から元の曜日を読み取ることもできます。
符号化したデータを、規則に従って元の情報に戻す処理を復号(デコード)といいます。
符号化は単に2進数へ変換することだけではありません。文字コードによる文字の表現、音声や画像のデジタル化、データ圧縮など、さまざまな場面で利用されています。
コンピュータが扱う情報の最小単位はビット(bit)であり、1ビットでは0と1の2通りを表すことができます。
2ビットでは00、01、10、11の4通り、3ビットでは8通りを表せます。
一般に、nビットで表せる異なるパターンの数は、
2n 通り
です。
| ビット数 | 表せるパターン数 |
|---|---|
| 1ビット | 2通り |
| 2ビット | 4通り |
| 3ビット | 8通り |
| 4ビット | 16通り |
| 5ビット | 32通り |
| 8ビット | 256通り |
| 10ビット | 1024通り |
したがって、N種類の情報を、すべて同じ長さのビット列で区別して表すためには、
2n ≧ N
を満たす最小の整数nを求めればよいです。
例えば、0から15までの整数は、0も数えるため全部で16種類あります。
実際に4ビットを使うと、0は0000、15は1111となり、0から15までの整数をすべて表せます。
ここで重要なのは、最大の数値ではなく、区別する必要がある情報の種類の数を考えることです。
例えば、0から100までの整数を区別する場合、必要なのは101種類です。26=64では不足し、27=128なら足りるので、最小7ビットとなります。
なお、このようにすべての情報を同じビット数で表す方法を固定長符号といいます。
符号化では、一つの値だけでなく、複数の項目の組合せも表現できます。
例えば、四つのトッピングA、B、C、Dについて、それぞれを選ぶか選ばないかを考えます。
各トッピングには2通りの状態があるため、全体の組合せは、
24=16通り
となります。
ここで、Aに1、Bに2、Cに4、Dに8を割り当てます。
| トッピング | 割り当てる値 | 2進数 |
|---|---|---|
| A | 1 | 0001 |
| B | 2 | 0010 |
| C | 4 | 0100 |
| D | 8 | 1000 |
この割当てでは、選んだトッピングの数値を足し合わせるだけで、組合せを一意に表せます。
例えば、
0101101011110000となります。
それぞれのビットが、トッピングを選んだかどうかに対応しています。
この方法で組合せを区別できるのは、割り当てた数値が1、2、4、8という2の累乗になっているからです。2進数の各桁が独立しており、異なる組合せが同じ合計になることがありません。
一方、1、2、3、4という数値を割り当てると、AとDを選んだ場合の合計1+4=5と、BとCを選んだ場合の合計2+3=5が同じになります。これでは合計値だけから元の組合せを特定できません。
このような符号化は、複数の設定のオン・オフを一つの整数にまとめる場合などにも利用されます。
現実世界の音声や光などは、連続的に変化するアナログ信号として扱われることが多いです。
コンピュータでこれらの情報を扱うためには、連続的な信号をデジタルデータに変換する必要があります。
基本的な処理の順序は、次のとおりです。
標本化 → 量子化 → 符号化
それぞれの工程には、異なる役割があります。
アナログ信号から、一定の間隔で値を取り出す処理です。
音声の場合、連続的に変化する音の波形を、一定の時間間隔で測定します。
例えば、1秒間に8000回測定する場合、標本化周波数は8000Hz(8kHz)となります。
標本化によって、時間的に連続した音声信号から、各時点の振幅の値が得られます。
標本化によって取り出した値を、あらかじめ決められた有限個の段階に対応させる処理です。
例えば、測定された振幅が3.7であっても、整数の段階しか使用しない場合には、4などの近い値に置き換えます。
量子化では元の値を近似するため、一般に誤差が発生します。これを量子化誤差といいます。
段階数を増やすと、元の信号をより細かく表現できますが、各段階を区別するために必要なビット数も増えます。
例えば、8ビットで各段階を表すなら、
28=256段階
を区別できます。
量子化された値を、0と1のビット列に対応させる処理です。
例えば、0から7までの8段階に量子化した値なら、3ビットの2進数000から111に対応させられます。
これによって、音声の情報をコンピュータで保存・処理・通信できるようになります。
このように、標本化は値を取り出す処理、量子化は値を有限段階にする処理、符号化は値をビット列に変換する処理です。
三つの工程を合わせたものがデジタル化であり、符号化はその一段階に当たります。
音声をデジタル化する代表的な方式に、PCM(Pulse Code Modulation、パルス符号変調)があります。
PCM方式では、標本化、量子化、符号化の三つの工程によって、音声をビット列として表します。
非圧縮PCM音声の基本的なデータ量は、
データ量(ビット)=標本化周波数×量子化ビット数×チャンネル数×時間(秒)
で求められます。
例えば、標本化周波数8000Hz、量子化8ビット、モノラル(1チャンネル)の音声を5秒間記録すると、
8000×8×1×5=320000ビット
すなわち、40,000バイト(約40kB)の音声データになります。これは音声の標本データだけの量であり、ファイルの管理情報などは含みません。
画像でも、標本化、量子化、符号化という考え方が使われます。
ただし、音声と画像では標本化する対象が異なります。
| 工程 | 音声の場合 | 画像の場合 |
|---|---|---|
| 標本化 | 一定時間ごとに振幅を取り出す | 格子状の位置ごとに色や明るさを取り出す |
| 量子化 | 振幅を有限個の段階にする | 明るさや色の値を有限個の段階にする |
| 符号化 | 段階値をビット列にする | 各画素の値をビット列にする |
画像では、標本化によって画素(ピクセル)ごとの情報を取り出します。
例えば、RGBの各色成分を8ビットで表す場合、各成分で256段階を区別できます。3成分で合計24ビットを使い、約1677万通りの色を表現できます。
一般に、画素数や階調数が増えるほど細かい画像表現ができますが、圧縮しない場合のデータ量も大きくなります。
コンピュータで文章を扱う場合も、文字を数値やビット列に変換する必要があります。
文字コードとは、文字と数値やバイト列との対応を定めるための仕組みです。
例えば、ASCIIでは、英大文字のAには10進数の65に相当する符号が割り当てられています。この値は2進数では01000001と表せます。
文字コードに関係する代表的な仕組みに、UnicodeとUTF-8があります。
Unicodeは、世界中のさまざまな文字を統一的に扱うための規格であり、各文字などにコードポイントと呼ばれる番号を割り当てています。
UTF-8は、そのUnicodeのコードポイントをバイト列で表す符号化方式の一つです。
UTF-8では、1文字のコードポイントを1~4バイトで表します。
例えば、文字AはUTF-8では1バイト、日本語のあは3バイトで表されます。
UTF-8は可変長符号であり、すべての文字を同じバイト数で表すわけではありません。
そのため、同じ文字数の文章であっても、含まれる文字の種類によってデータ量が異なります。
なお、UTF-8ではASCIIに含まれる文字はASCIIと同じ1バイトの値で表されるため、ASCIIとの互換性があります。
文字を正しく復号するためには、送信側と受信側で、符号化方式について共通の理解が必要です。
例えば、送信側がある文字コードで文章をバイト列に変換したのに、受信側が別の文字コードとして解釈すると、元の文字とは異なる文字が表示される場合があります。
これが文字化けです。
文字コードによっては、文字とバイト列の対応だけでなく、文字を区切る方法も異なります。
したがって、単に文字数やバイト列だけが分かっていても、使用された符号化方式が不明であれば、元の文章を正しく復元できるとは限りません。
符号化には、すべての情報を同じ長さで表す固定長符号のほかに、情報によって異なる長さの符号を割り当てる可変長符号があります。
例えば、A、B、Cという三つの記号を固定長符号で表す場合、2ビットずつ割り当てればよいです。
| 記号 | 固定長符号 |
|---|---|
| A | 00 |
| B | 01 |
| C | 10 |
しかし、Aが非常によく出現し、Cがほとんど出現しないなら、すべての記号に2ビットを使うことが効率的とは限りません。
そこで、出現しやすい記号に短い符号を割り当てます。
| 記号 | 出現確率 | 可変長符号 | 符号長 |
|---|---|---|---|
| A | 0.6 | 0 | 1ビット |
| B | 0.3 | 10 | 2ビット |
| C | 0.1 | 11 | 2ビット |
この場合、Aを1ビットで表せるので、平均的なデータ量を小さくできます。
可変長符号の効率を考えるときには、平均符号長を利用します。
平均符号長とは、各記号の出現確率に符号長を掛けたものの合計です。
平均符号長=Σ(出現確率×符号長)
先ほどの例では、
L=0.6×1+0.3×2+0.1×2
=0.6+0.6+0.2
=1.4ビット
となります。
固定長符号では1記号当たり2ビット必要だったのに対し、可変長符号では平均1.4ビットで表せます。
このように、記号の出現確率に応じて符号の長さを変えることで、データを効率よく表現できます。
可変長符号では、符号の長さが異なるため、連結したビット列をどこで区切るかが問題になります。
例えば、Aを0、Bを01とすると、最初の0を読んだ時点では、Aが確定したのか、Bの途中なのかを判断できません。
そこで、区切り記号を使わず、左から順に符号を確定できるようにする方法があります。
その代表的なものが接頭語自由符号(プレフィックス符号)です。
接頭語とは、符号の先頭部分のことです。
接頭語自由符号では、どの符号語も、ほかの符号語の接頭語にならないようにします。
例えば、次の符号語を考えます。
0、10、110、111
これらは、どの符号語もほかの符号語の先頭部分と一致しません。
例えば、010110111というビット列は、
0 | 10 | 110 | 111
と、左から順に区切って復号できます。
出現確率の高い記号に短い符号を割り当てるハフマン符号も、接頭語自由符号を利用する代表的な符号化方法です。
データ圧縮とは、情報の表し方を工夫して、保存や通信に必要なデータ量を削減することです。
圧縮でも符号化の技術が利用されます。
圧縮には、大きく分けて可逆圧縮と非可逆圧縮があります。
圧縮したデータから、元のデータを完全に復元できる方式です。
代表的な方法の一つが、ランレングス法(連長圧縮)です。
例えば、次のように同じ記号が連続するデータを考えます。
AAAAAABBBBCCC
これを、記号と連続回数の組で、
(A,6) (B,4) (C,3)
と表します。
このように、同じ値が長く続くデータでは、連続する値をまとめて記録することで、データ量を削減できる場合があります。
一方、値が毎回変化するデータでは、まとめられる部分が少なくなり、圧縮効果は小さくなります。
例えば、PCM方式で記録した音声について、すべての標本が同じ値となる無音区間なら、長い繰返しをまとめて表せるため、ランレングス法との相性がよいです。
これに対して、不規則に値が変化するホワイトノイズや、標本値が頻繁に変わる音声では、同じ値が連続しにくいため、ランレングス法による圧縮は効きにくくなります。
なお、実際の圧縮後のデータ量は、連続回数を記録する方法などにも左右されます。圧縮方法とデータの特徴が合わなければ、圧縮後のほうが大きくなる場合もあります。
非可逆圧縮とは、一部の情報を削減することでデータ量を小さくする方式です。
元のデータを完全には復元できませんが、人間が知覚しにくい情報などを削減することで、比較的少ないデータ量でも実用的な品質を保てます。
JPEG画像や、多くの動画圧縮方式などで利用されています。
EXAMPLE
3ビット
4ビット
8ビット
15ビット
正解1.4ビット
N種類を固定長で表すには2n≧Nとなる最小のnビットが必要です。0を含む16種類は0000~1111の4ビットでちょうど表せます。
PRACTICE