79
コンピュータ基礎 情報表現 成蹊大学 理工学部 情報科学科

コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

コンピュータ基礎

情報表現

成蹊大学 理工学部

情報科学科

Page 2: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

データや情報を表現する

-ビットをいろいろな角度から見る

Page 3: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

計算機で扱うさまざまなデータ

離散量• 個数(自然数) . . . 0から? 1から?

• 整数

連続量,• とても大きな数や小さな数 → 浮動小数点数

文字(欧米の文字,アジアの文字, . . .) 関係

真偽,正誤,勝敗

図形,画像,音楽, . . . 他のデータのありか

Page 4: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

ビット(bit)とは何か

“binary digit” の略

「1桁の2進数字(0 と 1)」から転じて

2進法1桁に相当するデータ量

を表わす単位のこと

m ビット使うと(どんな種類の情報でも) 2m

通りのものを区別できる

• 例:0 以上 2m 未満の自然数

• 例:m 日分の相撲の勝敗

• 例:m 人の学生の性別

Page 5: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

5

情報の表現(数値データ:整数)

Dec Bin Oct Hex Dec Bin Oct Hex0 0 0 0 16 10000 20 101 1 1 1 17 10001 21 112 10 2 2 18 10010 22 123 11 3 3 19 10011 23 134 100 4 4 20 10100 24 145 101 5 5 21 10101 25 156 110 6 6 22 10110 26 167 111 7 7 23 10111 27 178 1000 10 8 24 11000 30 189 1001 11 9 25 11001 31 19

10 1010 12 A 26 11010 32 1A11 1011 13 B 27 11011 33 1B12 1100 14 C 28 11100 34 1C13 1101 15 D 29 11101 35 1D14 1110 16 E 30 11110 36 1E15 1111 17 F 31 11111 37 1F

各桁で使用できる数字10進数(decimal):0~9 2進数(binary) :0,1

8進数(octal) :0~7 16進数(hexadecimal):0~9,A~F

Page 6: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

n 進法とは

位取り記数法 (cf. ローマ数字 vs. アラビア数字)

例:11012 = 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20

例:C7D16 = 12 x 162 + 7 x 161 + 13 x 160

= 1100 0111 11012

3 進法でも 5 進法でも同様

• でもなぜ16進法が重要?

• 1 進法, -2 進法ってあり?

► n 進法の n を基数(radix)という

Page 7: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

整数の表現

日常生活では,符号 (+/-) と絶対値で表現

• 16ビットあれば,絶対値が 215-1 以下の数が表現できる

だが,計算機ではほとんど使われない

なぜ?

Page 8: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

負の整数の表現(16ビットの場合)

1111 1111 1111 1111・・・・・・

0000 0000 0000 01000000 0000 0000 00110000 0000 0000 00100000 0000 0000 00010000 0000 0000 0000

8

= 65535・・・・・・

= 4= 3= 2= 1= 0

16桁の2進数は、0以上なら次のように表現できる

では、 -1 はどのように表せば良いのだろう?

- 0000 0000 0000 0001 ?単にマイナスをつけることはできない。

2値化の物理的な意味から3つ目の値になってしまう

Page 9: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

負の整数の表現(16ビットの場合)

・・・・・・

0000 0000 0000 01000000 0000 0000 00110000 0000 0000 00100000 0000 0000 00010000 0000 0000 0000

9

・・・・・・

= 4= 3= 2= 1= 0

2進数の-1は、1を足したときに0にならなければならない

1111 1111 1111 1111 = -1

1111 1111 1111 1111+) 1

1 0000 0000 0000 0000はみ出した17桁目は無視(使わない)

Page 10: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

正・0・負の整数の表現(16ビットの場合)

・・・・・・

0000 0000 0000 00110000 0000 0000 00100000 0000 0000 00010000 0000 0000 00001111 1111 1111 11111111 1111 1111 11101111 1111 1111 11011111 1111 1111 1100

・・・・・・

10

・・・・・・

= 3= 2= 1= 0= -1= -2= -3= -4

・・・・・・

16ビットの0以上と負の整数の連続性から・・・

0111 1111 1111 1111

1000 0000 0000 0000

= 32767

=-32768

0以上の整数

負の整数

上記の方式で整数を表現する方法を2の補数表現をという。

大値と 小値が2進数では

1 しか違わない

Page 11: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

負の整数の2の補数表現を求めるには(16ビットの場合)

11

例:10進数で-5の2の補数表現を求める

① 同じ絶対値の5の2進数は

5 = 0000 0000 0000 0101

上記の手順を逆に戻せば、負の値の2の補数表現と絶対値が等しい正の値を求めることができる。ちなみに逆順ではなく、①→②→③の手順をそのまま適用しても絶対値が等しい正の整数にたどりつくことができる。

② 全ビットを反転する

1111 1111 1111 1010③ 1を加える

1111 1111 1111 1011 = -5

Page 12: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

整数-8-7-6-5-4-3-2-101234567

整数01234567

-7-6-5-4-3-2-1-0

色々な整数表現(4 ビットの場合)二進表記

0000000100100011010001010110011110001001101010111100110111101111

整数01234567

-0-1-2-3-4-5-6-7

1の補数表現

符号付き絶対値表現

バイアス(げたばき)表現

自然数0123456789

101112131415

(符号なし整数)

整数01234567

-8-7-6-5-4-3-2-1

2の補数表現

Page 13: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

n 進法における小数

位取り記数法の原則は,小数点以下があっても変わらない

•(dm ... d2 d1 d0 . d-1 d-2 ... d-k)n

j= -k

mdj n j=

Page 14: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

n 進法における小数

十進展開が無限に続く小数は,十進展開では正確に表現できない

• 問:1/n(n は正整数)は,n がどのような数ならば正確に表現できるか?

2進表記の小数

• 問:0.1012 は十進表記ではいくつか?

• 問:1/10 は 2 進表記ではどうなるか?1/3 は?

Page 15: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

浮動小数点数(付録B) 計算機で扱いたい連続量の中には,絶対値の大きな

数や小さな数もある

• アボガドロ数: 6.02252... x 1023

• 水素原子の半径: 5.292... x 10-11

小数点の左は1桁(1~9)と決めてよい

• 0.0000 ... だけは例外扱い

±a.f f f f f f f f x 10±eee:浮動小数点数

• ±a.fff f f f f f: fraction, significand, mantissa• ±eee : exponent

Page 16: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

浮動小数点数

2 進の浮動小数点数

±a.f f f f f f f f f x 2±eee

• a = 1,そこで 先頭の符号 (±) f f f f f f f f (仮数部) ±eee (指数部)

の三者を(2進数で)表現する方法がとられる

Page 17: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

浮動小数点数 - IEEE754規格

±1.f f f f f f f f f x 2±eeeを32ビットで表わす

S E F1bit 8 bits 23 bits

1 E 254 : (-1)S・2(E-127)・(1 + F2-23) E = 0, F = 0 : ゼロ

E = 0, F 0 : (-1)S・2-126・F2-23

(正規化されていない数)

Page 18: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

文字の表現

欧米文化圏の文字:国ごとに数十種類

• 7 ビットあれば表現できる

• アメリカでは ASCII(国際規格は ISO 646)

American Standard Code for Information Interchange

• 1 文字あたり 8 ビットあればカタカナまでは一緒に表現できる(半角カナ)

アジアでは数千以上の字種をもつ言語もある

• 1 文字あたり 16 ビット必要となる

Page 19: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

19

:ISO では国ごとに決める部分

ASCIIコード

0123456789:;<=>?

@ABCDEFGHIJKLMNO

PQRSTUVWXYZ[\]^_

`abcdefghijklmno

pqrstuvwxyz{|}~DEL

!“#$%&’()*+,-./

0123456789ABCDEF

0 1 2 3 4 5 6 7 (上位3ビット)

(下位4ビット)

“s”は73(16)=115

という番号の文字

Page 20: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

バイト (byte, B)

1バイト = 計算機システムにおいて1文字を表現するのに用いるビット数

• (慣用的に)8ビットを意味する

• オクテット (octet) は常に8ビットを意味する

Page 21: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

バイト (byte, B)

フロッピーディスク(2HD): 1.44MB ハードディスク: 数百GB ~ 数TB メモリ:1枚数百MB ~ 数GB

• メモリ容量の“キロ”は 210 倍, ,“メガ”は 220 倍.“ギガ”は 230 倍.なぜだろう?

cf. ディスク容量や通信速度の“キロ”は 103 倍,“メガ”は 106 倍のこともある

“キロ”については,103 倍は “k”,210 倍は “K” と書き分ける

Page 22: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

バイトの接頭辞SI接頭辞と2進接頭辞

SI国際単位系:“Le Système International d‘Unitès”

SI接頭辞 SI基準値の乗数 2進乗数 2進接頭辞+Bytes

キロ kilo k 103=1,000 210=1,024キビ kibi

(kilo binary)KiB

メガ mega M 106=1,000,000 220=1,048,576 メビ mebi MiB

ギガ giga G 109=1,000,000,000 230=1,073,741,824 ギビ gibi GiB

テラ tera T 1012=1,000,000,000,000 240=1,099,511,627,776 テビ tebi TiB

ペタ peta P 1015 250=1,125,899,906,842,624 ペビ pebi PiB

エクサ exa E 1018 260=1,152,921,504,606,846,976 エクスビ exbi EiB

ゼタ zetta Z 1021 270=1,180,591,620,717,411,303,424 ゼビ zebi ZiB

ヨタ yotta Y 1024 280=1,208,925,819,614,629,174,706,176 ヨビ yobi YiB

Page 23: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

メモリの番地 (address)

メモリは巨大なアパートのようなもの

その特定の場所(区画,セル)を指定するものが番地

• 近の計算機ではバイト単位で番地をつけるのが主流

番地も自然数,計算機の中では2進法で扱う

• n ビットあれば 0 ~ 2n-1 番地まで表わせる

• 32ビットで 4GB のメモリの特定の場所を指定できる

Page 24: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

番地 (address)

0000000100020003000400050006000700080009000A. . .

8 bits

アドレスデコーダ

. . .

0 1 1 0

選択

Page 25: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

番地 (address)

0000000100020003000400050006000700080009000A. . .

8 bits← 8 ビットで入りき

らない情報も多い

Page 26: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

語 (word) ― も典型的な処理単位

000000040008000C001000140018001C0020. . .

+0 +1 +2 +3

4 バイトずつ横に並べて描くと (big endian)

← 1語

1語=32ビットが典型(なぜか?)

1A 38 CE 0B

例えば、439930379=1A38CE0B(16)を格納すると、big endianでは・・・

Page 27: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

語 (word)

000000040008000C001000140018001C0020. . .

+3 +2 +1 +0

もう一つの方式 (little endian; Pentium等)

1A 38 CE 0B

例えば、439930379=1A38CE0B(16)を格納すると、little endianでは・・・

Page 28: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

要復習

自然数の n 進数表現

• 特に 2 進数,16進数表現

• 2 進数の加減乗除算

整数の2進表現法(特に 2 の補数表現)

半角文字の表現(特に ASCII) バイト,オクテット,ワード

• 1 MB は何バイト? (記憶装置の)番地

n 進数表現における小数

Page 29: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽(正誤,勝敗)の表現

命題 = 真偽を論じることのできる言明

•例: 「S102001 の学生は男である」

•真偽は 1 ビットあれば表現できる

127人の性別は127ビットで表現できる

• たとえば 男⇔ 0,女⇔ 1もっと少ないビット数で表現することはできない

だろうか?

⇒ 「情報理論」

Page 30: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現

問:127 名の中の女子の人数が下記のような

場合,全員の性別を表現するのに,それぞれ

どのように表現すると少ないビット数ですむ(効

率的に記録や伝達ができる)か?

(a) 女子が 1 名しかいないとわかっている場合

(b) 女子が数名しかいないとわかっている場合

(c) 女子が全体の 1/4 くらいいる場合

Page 31: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現 - 答え

(a) 女子が 1 名しかいないとわかっている場合

7 bits(b) 女子が数名しかいないとわかっている場合

n 人いる場合,たかだか 7(n+1) bits方法1:「3番,27番,108番,117番,以上です.」

3, 27, 108, 117, 0方法2:「4人います.3番,27番,108番,117番.」

4, 3, 27, 108, 117

• n < 18 ならば単純法よりも節約になる

Page 32: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現

(c) 女子が全体の 1/4 くらいいる場合

• 学籍番号順に二人ずつ組にする

男-男 (9 / 16) → 0 と符号化

男-女 (3 / 16) → 10 と符号化

女-男 (3 / 16) → 110 と符号化

女-女 (1 / 16) → 111 と符号化

• 例:0110111010000 (13 bits)⇔ 男男女男女女男男男女男男男男男男 (16名)( 単純法では 0010 1100 0100 0000)

それ以外の解釈はできない

Page 33: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現 一人あたりの平均ビット数は

(1・(9/16) + 2・(3/16) + 3・(3/16) + 3・(1/16)) / 2 = 27/32 ≒ 0.84bits

「符号の木」(符号決定木) 0

0

0

1

1

1男男

男女

女男 女女

第1ビット

第2ビット

第3ビット

1つの符号で2人分だから

Page 34: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報量

数当てゲーム• A: この紙の裏に 0 以上 1000 未満の値が一

つ書いてあります.当ててください.

• B: 100以上ですか?

• A: はい.

• B: 200以上ですか?

• A: はい.

• (つづく)

問: 適な質問のしかたは? ただし“はい”か“いいえ”で答えられる質問に限る.

Page 35: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報量

「確率 50% の事象の成否がわかった」または「場合の数が半減した」場合,「1ビットの情報が得られた」という

• cf. 記憶容量単位としてのビット

一般に,ある質問によって得られる情報量は

log2(1/得られた答の生起確率)

• 50%以外のときは答によって情報量が異なる

• 珍しい物事(“大ニュース”)は情報量が多い

例:勝率5割チームの10連勝

Page 36: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報量

yes-no 質問によって得られる情報量の期待値は,yes の確率を p とすると

I(p) = p log2 (1/ p) + (1-p) log2 (1/ (1-p))

I(p) は p = 1/ 2 のときに 大値 1 をとる

• p = 1/ 2 に近い質問をするのが賢い

例:p = 1/ 128 ならば

I(p) = (1/ 128)・7 + (127/ 128)・0.0113= 0.066

Page 37: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

p log(1/p) + (1-p) log (1/(1-p)) のグラフ

p

Page 38: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報量

通報を受けた後に、解消される不確定性の大きさを示す尺度

通報内容の意外性が大きいほど、情報量は大きくなる

シャノンの自己情報量xの生起確率をP(x)とするとI(x)=log(1/P(x))=-logP(x)

Page 39: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報量(平均情報量、エントロピー)

一般に事象X={x1,x2,・・・,xn}があって、おのおのの生起確率をP(xi)とすると

情報理論では、logの底を2とし、bitを単位としている

n

iii xPxPXH

1

)(log)()(

][)(log)()(1

2 bitxPxPXHn

iii   

Page 40: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現 - 再び

一人あたりの平均ビット数は(1・(9/16) + 2・(3/16) + 3・(3/16)

+ 3・(1/16)) / 2 = 27/32 ≒ 0.84bits 「符号の木」

(符号決定木) 0

0

0

1

1

1男男

男女

女男 女女

第1ビット

第2ビット

第3ビット

Page 41: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

一般化すると

M 種類の記号 a1, a2, . . . , aM がそれぞれ確率 p1, p2, . . . , pM で出現する記号列を,できるだけ少ないビット数で表現したい.どう符号化する(符号の木を作る)のがよいか?

男女

女男

女女

男男

3/163/161/16

9/16ak pk

234

1k例1:

AB

AB

O4/102/101/10

3/10ak pk

234

1k例2:

Page 42: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

案1:トップダウン戦略

確率が均等になるように全体を2群に分ける

個々の群に対して同様な分割を繰り返す

• この例ではビット数が節約できない

AB

AB

O4/102/101/10

3/10

ak pk

234

1

k0

00

1

11

a1 a3 a2 a4

Page 43: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

案2:ボトムアップ戦略

確率の低い方から二つを組にする

これを全体が一つになるまで繰り返す

上記の併合順序にしたがって符号の木を作る

AB

AB

O4/102/101/10

3/10A

B+AB

O4/103/10

3/10A

O+B+AB4/106/10

O+B+AB+A 10/10

Page 44: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

案2:ボトムアップ戦略

AB

AB

O4/102/101/10

3/10A

B+AB

O4/103/10

3/10A

O+B+AB4/106/10

O+B+AB+A 10/10

0

0

0

1

1

1A

OB AB

平均符号長 1.9 bits

“ハフマン符号”

1・0.4 + 2・0.3 + 3・0.3 = 1.9

Page 45: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

真偽の表現:注意

性別情報を A さんから B さんに伝えるには:

• 符号化の方法(符号の木)がすでに了解事項であるならば,符号自体を伝えればよい

• そうでない場合は,符号の木自体を伝えるのが第一歩

0

0

0

1

1

1男男

男女

女男 女女

Page 46: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

ハフマン符号の例 例題:

ある情報には7種類の記号A, B, C, D, E, F, Gが、それぞれ16/32, 5/32, 4/32, 3/32, 2/32, 1/32, 1/32 という確率で発生する。

このとき、記号A~Fをハフマン符号により

2進符号化することを考える。

もし7種類の記号が同じ確率で発生するなら、単純に7種類の記号を区別するには3桁の2進数(000~111までの8通り)のうち7個をそれぞれの記号に与えれば良い。

A:001 B:010 C:011 D:100 E:101 F:110 G:111 などこの方法では記号がN個あれば全体で3Nビットの情報となる。異なる確率で各記号が発生するなら、ハフマン符号を用いて全体の情報量を減らすことができる。

Page 47: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

題意に対するエントロピーを求めると、

 ビット2.1832/69.6632/10)83*3.42125*2.68(16

 5)(03225)(1

3225)(1.58

3235)(2

3245)(2.32

3255)(4

3216

321log

3212

322log

322

323log

323

324log

324

325log

325

3216log

3216

222222

報量)エントロピー(平均情

つまり、1記号あたり3ビット使わずに

2.18ビットで済むということが分かる。

Page 48: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

ハフマン符号を得るための符号決定木を作成

A: 16/32B: 5/32C: 4/32D: 3/32E: 2/32F: 1/32G: 1/32

C4

9

B5

0 1

G1

F1

2E2

0 1

40 1

160 1

32

A16

0 1

7

D3

0 1

※各記号の確率の分母は省略してある

確率の小さい2つから組み合わせていく

A: 0B: 100C: 101D: 110E: 1110F: 11110G: 11111

ハフマン符号

平均符号長=3216

×1 325

×3+ 324

×3+323

×3+322

×4+ 321

×5+321

×5+

=(16+15+12+9+8+5+5)/32=70/32≒2.19ビット

Page 49: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

英文の格納法

問:下記の文(約150文字)はどうメモリに格納すると効率的か?

• 大文字小文字は区別しなくてよい.

• 句読点とアポストロフィは無視してよい.

Peter Piper picked a peck of pickled pepper;A peck of pickled pepper Peter Piper picked;If Peter Piper picked a peck of pickled pepper;Where’s the peck of pickled pepper Peter Piper picked?

― Mother Goose Nursery Rhyme

Page 50: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

案1:文字の種類数と出現頻度の偏りに基づいて符号化する

• 文字は16種類 → 1文字 4 ビットあれば十分

• p と e と空白は他よりずっと多い

peter piper picked a peck of pickled peppera peck of pickled pepper peter piper pickedif peter piper picked a peck of pickled pepperWhere’s the peck of pickled pepper peter piper picked

英文の格納法

Page 51: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

英文の格納法

案2:同じようなつづりが何度も出現

• 4文字以上のものでは,peter: 4, piper: 4, picked: 4, peck: 4, pickled: 4, pepper: 4

peter piper picked a peck of pickled peppera peck of pickled pepper peter piper pickedif peter piper picked a peck of pickled pepperwhere’s the peck of pickled pepper peter piper picked

Page 52: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

英文の格納法

peter piper picked a peck of pickled pepper a peck of pickled pepper peter piper picked

peter pip(6,3)picked a peck of(17,5) l (18,3)pep(32,4)(25,25)(69,18)

(m,n) : “m文字前から始まるn文字と同一”m<256, n<256 とすると2バイトで表せる

p, e などの文字:それぞれ1バイトで表せる

(m,n) と 文字 の区別には1ビットあれば十分

Page 53: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報圧縮:まとめ

2値情報(真偽,勝敗など)は,ふたつの値の構成比が偏っているほど圧縮できる (cf. 情報量の式)

英文の場合は

• 出現文字の頻度の偏りを利用して圧縮できる

• 隣接する複数文字間の相関(繰返しパターン)を利用して圧縮できる

Page 54: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

情報圧縮技術の応用

ファイル圧縮・解凍ツール:

• Winzip, LZH, gzip, bzip2, . . .• 問:英字や数字を格納したさまざまなファイルを

作り,圧縮ツールでどれくらいまで圧縮できるか実験してみよ.

マルチメディア情報

• 画像の表現(例:JPEG)

ほとんど質を落とさずに 1/10 以下に圧縮

• 音声の表現(例:MP3)

Page 55: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

誤り訂正符号

Error-correcting codes (ECC) 記憶していた (または伝送中の) データ (ビッ

ト列) のどこかが反転してしまったら?

• 「おかしい」ことを検出したい (誤り検出)

cf. check digit,カード番号

• さらに,僅かな誤りは復元したい (誤り訂正)

生物ならば,ちょっとした怪我は治る

DNAも,複製のときに誤りが入っても,そのほとんどは直る

Page 56: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

まずは誤り検出

4ビットあれば,16通りのデータを表せる.

• しかし1ビットでも誤って記憶すると別のデータに化けてしまう

1ビット余分に使って,以下のようにしてみる

• 00000, 00011, 00101, 00110, 01001, 01010, 01100, 01111, 10001, 10010, 10100, 10111, 11000, 11011, 11101, 11110

パリティビット(parity bit)

偶数パリティ

Page 57: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

なぜ誤りが検出できるのか?

5ビットのうちのどの1ビットが反転しても「ありえないデータ」になってしまうから

2ビット反転したら検出不能

Page 58: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

誤り検出の効用

パリティビットがない m ビットデータ

• 各ビットの誤り率を p (≪1)とすると,

1ビット誤りの発生率: m ・p (1ーp)m ー1

m ビットのデータにパリティビットを付加

• 1ビット誤りは検出できる

• 2ビット誤りの発生率: (m+1)m・p2(1ーp)mー1 / 2

⇒ 約 2 / (m+1)p 倍の信頼性向上

Page 59: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

ハミング距離

二つの符号のハミング(Hamming)距離 =対応するビットが異なっている場所の数

• 10001001 と 10110001 はハミング距離が 3 ふつうの符号は,正しいデータ間のハミング

距離が 小 1 パリティビットを付加すると,正しいデータ間

のハミング距離が 小 2 正しいデータ間のハミング距離が 小 3

あったら?

Page 60: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

誤りの自動訂正は可能か?

正しいデータ間のハミング距離が 小 3 あったら,1ビットの誤りが元に戻せる!

1ビットの誤りを元に戻すには,m ビットのデータに何ビット追加する必要があるか?

• 2mビット追加すれば,多数決原理で復元可能になるが,3倍ものビットを使う

• もっと少ない追加ビット数でできないか?

Page 61: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

誤り訂正符号の原理

4ビットのデータに3ビット追加してみると:

1 1

0

0

A C

B

1 1

1

0

A C

B

01

0 0

01

1100001 1110001

11000010100001100000111100011101001110010111000111100000

7つの誤りパターンのいずれも正しい唯一のパターンに置換すれば良い

Page 62: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

誤り訂正符号

1ビットの誤りを元に戻すには,mビットのデータに 低何ビット追加する必要があるか?

• r ビット余分に追加してm+rビットの 符号語(codeword)にする

2m 通りのそれぞれをm+ r ビットで表す

• 1ビット誤りの入る方法は m+r 通り⇒ (m+r +1) 通りのデータが,個々の正しいデータの“仲間”とみなされる

• したがって (m+ r +1)・2m ≦ 2m+r

を満たすrビットの追加が必要となる。

では、どこに追加すれば良いか?

Page 63: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

一般化すると - ハミングのアイデア

0 0 1 1 0 0 1 Hamming符号パリティビットを挿入する位置がミソ

例1:4桁の2進数1001に必要な誤り訂正ビットは3ビット

印のついた位置のパリティビットを左図のように2n(n=0,1,・・・)の位置に入れる

もし上記のハミング符号0011001を 0011101で受け取ったとしたら・・・

0 0 1 1 1 0 12

0=1

21=2

22=4

受け取ったデータでパリティビットを確認すると

従って、誤ったビット位置は 1+4=5ビット目であると分かる。(間違ったパリティを求めるビット群の重なる

場所がそこしかないから)

○×

×

20=1

21=2

22=4

20=1と22=4のパリティが合わないことになる。

印自体は2nの位置から2n

おきに

×

Page 64: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

0 0 1 0 1 1 1 0 0 0 0 1 00 1 1 0 1 1 01

例2:2進数1111000010101110送信するときに必要な誤り訂正ビットは5ビットである

20=1

21=2

22=4

23=8

24=16

上記でパリティビットを含めてどのビットに誤りが生じても1ビットだけであれば誤り訂正が可能であることを確認しなさい。

Page 65: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

再びアルゴリズムの話

Page 66: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

アルゴリズムの良さを評価する方法

ある問題を解くためのアルゴリズムの良さは,計算時間の主要部分を占める操作(基本操作)の回数で大体見積もることができる.

大きさがnのデータを処理するときの基本操作の回数T(n)が,nのどのような簡単な関数に大体比例するかが非常に重要

• 「nの簡単な関数」の典型はf(n) = logn,n,n logn,n2,n3 など

• T(n) = 3n2+4n+5 のとき,“+4n+5” はほとんど重要でない.“3” もそれほど重要でない

Page 67: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

O( ) 記法(Big-“O” notation)

「大体比例する」を数式らしく書く方法

n 枚の答案を得点順に並べ替えるとき• T(n) は答案用紙の移動回数

• 高点を抜き出す操作を繰り返すと O(n2) • 下位または上位の桁から揃えてゆくと O(n)

0以上n未満の数当てゲーム

• T(n) は質問の回数

• 下手にやると O(n)• うまくやると O(log n)

Page 68: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

O( ) 記法の定義

大きさ n のデータを処理するときの基本演算の回数を T(n) とする

関数 T(n) が O(f(n)) であるとは,

• 正の定数 c と N が存在して,N 以上のすべての

n に対してT(n) c・f (n) が成り立つ

例:T(n) = 3n2+4n+5 のとき T(n) = O(n2)• 定義に従えば T(n) = O(n3) ,T(n) = O(n4) でもある

が,O(n2) の方がよい見積りである

O(log n) と書いたとき,対数の底は無関係

Page 69: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

O(log n) の威力

1n n1 /2 log n

1 04 2 2

16 4 464 8 6

256 16 81024 32 104096 64 12

16384 128 1465536 256 16

Page 70: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

べき乗 an を計算する

素朴な方法:1 a a ... a

n回

上の方法に対応する O(n) のアルゴリズム

b ← 1k = 1, ..., n について

b ← b aを行なう

k = 1

nacf.

Page 71: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

べき乗 an を計算する

少し工夫した O(log n) のアルゴリズム

b ← 1n が正である限り

もし n が奇数ならば b ← b an ← n / 2a ← a a

を繰り返す

このアルゴリズムは止まるか? 正しい結果を返すか?

n の最下位ビットが1

n を1ビット右シフト

Page 72: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

べき乗 an を計算する

b ← 1n が正である限り

もし n が奇数なら b ← b an ← n / 2a ← a a

を繰り返すa n b3 5 19 2 3

81 1 36561 0 243

最初

1回目

2回目

3回目

a, n, b の間に成り立つ関係は?

a0, n0, b0

a1, n1, b1

Page 73: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

べき乗 an を計算する

b ← 1n が正である限り

もし n が奇数なら b ← b an ← n / 2a ← a a

を繰り返すa n b3 5 19 2 3

81 1 36561 0 243

最初

1回目

2回目

3回目

a, n, b の間に成り立つ関係は?

b1 = b0 a0n1 = (n0ー1) / 2

a1 = a0 a0

n1 = n0 / 2a1 = a0 a0

n 偶数 n 奇数

Page 74: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

べき乗 an を計算する

b ← 1n が正である限り

もし n が奇数なら b ← b an ← n / 2a ← a a

を繰り返すa n b3 5 19 2 3

81 1 36561 0 243

最初

1回目

2回目

3回目

a, n, b の間に成り立つ関係は?

b1 = b0 a0n1 = (n0ー1) / 2

a1 = a0 a0

n1 = n0 / 2a1 = a0 a0

n 偶数 n 奇数

a1n1 b1= a0

n0 b0

Page 75: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

0.010101 ...11 1.00

111001110011 ...

Page 76: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

データ構造

世の中の少し複雑な物事は,構造(structure) をもっている• 一軒家 vs. 集合住宅

• 個人商店 vs. 会社組織

• 文字 vs. 単語 vs. 文 vs. 文章

• 住所,電話番号,電子メールアドレス

• 十進法表記

コンピュータの処理でも,構造の表現,作成,分解がとても重要⇒「情報数学」「アルゴリズムとデータ構造」

Page 77: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

構造をもった情報の例

英単語(アルファベット,1次元)

行列(数,2次元)

会社組織図(部署名,樹状)

数式(定数・変数・演算子,樹状)

鉄道路線図(駅,ネットワーク)

Page 78: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

英単語の一つの格納法

“dog” と “horse”を格納する

右の例では

• “dog” : 0番地

• “horse” : 4番地

‘d’0000‘o’0001‘g’000200003‘h’0004‘o’0005‘r’0006‘s’0007‘e’000800009

000A. . .

8 bits

← 終りの印

← 終りの印

Page 79: コンピュータ基礎 情報表現 - SEIKEI...正・0・負の整数の表現(16ビットの場合) ・・・ ・・・ 0000 0000 0000 0011 0000 0000 0000 0010 0000 0000 0000

79

英文の格納法

単語は11種類(延べ48文字),34語(1) peter: 4, (2) piper: 4, (3) picked: 4, (4) a: 3, (5) peck: 4, (6) of: 4, (7) pickled: 4, (8) pepper: 4, (9) if: 4, (10) where’s: 1, (11) the: 1

単語の辞書を作る• 単語の登録に 48+11+1 = 60 バイト

• 番号と単語の対応表に 12 (=11+1) x 6 bits 文の表現に 35 (=34+1) x 4 bits 合計 692 bits 文が長くなるほど“単語列”方式が有利