コンピュータサイエンス入門 第6回

情報量の計算方法と単位
情報量
コンピュータサイエンス入門
第6回
沖縄で雪が降った
宝くじで1等に当選
明日は講師急病で
休講です
> 北海道で雪が降った
> 宝くじで7等に当選
> 明日はいつもどおり
授業です
 log 2
log10 10
1
1
 log 2 10 
≒
≒ 3.32 (ビット)
10
log10 2
0.301
アナログ・ディジタル変換 (A/D変換)
標本化
量子化
(サンプリング)
 log 2 P( E )
今年は北海道で降雪
ビット(シャノン)
 log 2 1  0
(ビット)
今年は沖縄で降雪
 log 2
>
情報量の計算方法と単位
宝くじで7等当選
情報量=
1
  log 2 64 1  log 2 64  6
(ビット)
64
5分の曲を保存するのに何MB必要?
1秒に44100回
サンプリング周波数44.1KHz
ビット数/サンプル
量子化ビット数 16bit
⇔モノラル
ステレオ
宝くじで1等当選
 log 2
log 10
1
7
 log 2 107  7 10 ≒
≒ 23.26
7
10
log10 2
0.301
(ビット)
5分の曲を保存するのに何MB必要? 約53MB
1秒に44100回
サンプリング周波数44.1KHz
ビット数/サンプル
量子化ビット数 16bit
⇔モノラル
ステレオ
符号化
ランレングス圧縮
文字コード
あ → 0001
→ 00001001
い → 0010
90
可逆圧縮
AAAAABBBBBAAACDD
→ 11111001
→
10101 →
113
→
A5B5A3C1D2
同じデータが連続するとき効果大
6
3
1
5
4
1
1
2
7
4
6
5
5
7
2
1
ハフマン符号
可逆圧縮
I␣am␣a␣man
I
␣
1110
1111
1100
1101
1110
1111
→
000 001 010 011 001 010 001 011 010 100
1110 10 0 110 10 0 10 110 0 1111
ISO7 (J I S7)
7ビット
p
r
S
c
s
¥
l
|
<
L
-
= M ] m }
.
> N ^ n
/
? O _ o
~
EBCDIC
8ビット
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3
␣
& /
|
<
= M ] m }
L
.
> N ^ n
/
? O _ o
1100
1101
1110
1111
~
8ビット 全角16ビット
0
1
2
3
␣
C
D
E
F
,
<
p
ー タ
!
1 A Q a q
ア チ
“
2 B R b
0 @ P
`
r
イ ツ
S
c
s
ウ テ
¥
l
|
シ フ
-
= M ] m }
ス ヘ
.
> N ^ n
セ ホ
/
? O _ o
# 3 C
{
}
0
a
j
~
A
J
1
b
k
s
B K
S
c
l
t
C
T 3
L
UNICODE
L
~
* % @
(
)
_
‘
+
;
>
=
|
┐
?
“
‘
¡ ± Á Ñ á ñ
2 B R b
r
‚
’
¢
²
Â Ò â ò
3 C
c
s
ƒ
“
£
³
Ã Ó ã ó
l
| Œ œ ¬ ¼
S
,
<
-
= M ] m }
L
.
> N ^ n
/
? O _ o
~
Ž
Ì
Ü
ì
½
Í
Ý
í
ý
ž
® ¾
Î
Þ
î
þ
Ÿ
¯
Ï
ß
Ï
ÿ
¿
ü
8ビット 全角16ビット
41
54
30
エスケープ
シーケンス
42
30
26
47 2D
ソ マ
(UCS-2 , UCS-4)
2byte
4byte
2
0
1
2
3
ー タ
ミ
。 ア チ ム
43
「 イ ツ メ
41
54
30
88 A4 94
4C
」 ウ テ モ
C
D
E
F
ヤ シ フ ワ
ュ ス ヘ ン
半角未定義のコードを
全角の上位に使う
ョ セ ホ ゛
ッ
ソ マ
“
EUC (拡張UNIXコード)
8ビット 全角16ビット
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3
␣
0 @ P
‘
p
!
1 A Q a q
“
2 B R b
# 3 C
S
r
c
s
l
|
~
<
° À Ð à ð
p €
0 ~8 9 A B C D E F
1B 28 4A 43
1B 24
‘
1 A Q a q
シフトJIS
~
~
C
D
E
F
l
,
-
~
~
,
s
0 1 2 3 4 5 6 7 ~ B C~F
Q a q
R b
c
0 @ P
~
1100
1101
1110
1111
`
r
S
~
C
D
E
F
P
R b
ISO-2022-JIS
111
~
0
1
2
3
000
~
␣ 0 @
0000
! 1 A
0001
“ 2 B
0010
# 3 C
0011
p
~
n
100
110
‘
1111
~
I
011
10
P
Q a q
8ビット
~
0000
␣
0000
!
0001
“
0010
#
0011
~
→
010
出現数順に短いコード
を割り当てる
0
ISO-8859-1(Latin-1)
111
~
m
n
␣
m
001
7ビット
000
~
␣ 0 @
0000
! 1 A
0001
“ 2 B
0010
# 3 C
0011
~
a
a
000
ASC I I コード
C
D
E
F
コード配置に
自由度がある
,
<
-
= M ] m }
L
.
> N ^ n
/
? O _ o
~
文字一覧は 多摩ソフトウエア有限会社様のサイトより http://www.tamasoft.co.jp/ja/general-info/unicode.html
2
述語論理
正規表現
動物(x) 「xは動物である」
死亡(x) 「xは死ぬ」
∀x(動物(x)→死亡(x))
動物(スカシカシパン)
死亡(スカシカシパン)
構文図式
<数字>::= 0|1|2|3|…|9
<年2>::=<年号>|<年2><数字>
M
T
S
H
<年号>::=M|T|S|H
英小文字1文字、数字1文字
<数字>::= 0|1|2|3|…|9
a*
<年1>::=<年号><数字><数字>
aで始まる文字列
a??
aで始まる3文字の文字列
<年2>::=<年号>|<年2><数字>
メタ言語・・・言語のルールを書くための言語
次の規則から生成可能な式は?
<式>::=<変数>|( <式>+<式> )|<式>*<式>
<変数> ::=A|B|C|D
<式>::=<変数>|( <式>+<式> )|<式>*<式>
<変数> ::=A|B|C|D
逆ポーランド表記法(後置表記法)で次の式は?
逆ポーランド表記法(後置表記法)で次の式は?
数字
逆ポーランド記法
1 + 2
1 2 +
1 + 2 + 3
1 2 + 3 +
(1
[a-z][0-9]
次の規則から生成可能な式は?
<年号>::=M|T|S|H
BNF
) (
+ 2 × 3 + 4
EF-G÷CD-AB+÷+
EF-G÷CD-AB+÷+
)
1 2 + 3 4 +×
3
逆ポーランド表記法(後置表記法)で次の式は?
245
状態遷移図
EF-G÷CD-AB+÷ +
入出力
処理開始
実行可能
状態
時間切れ
待ち
状態
①
②
③
小 00
↑ 02
03
CPU割当
実行
状態
逐次探索法
二分探索法
①
③
②
入出力
処理終了
00
02
03
最大比較回数
最大比較回数
log 2 n  1
↓
大 n
n
n
計算量
アセンブリ言語
機械語(マシン語)
結果を出すまでの手順と繰り返しの最大数
二分探索法 log 2 n 
逐次探索法 n 
 
直径nの円を塗りつぶす手順  n
2
01001011
LD 1,TEIHEN
1行づつ対応
11010110
MUL1,TAKASA
インタプリタ
0101010111110101
アセンブラ
翻訳
1 N = 3
翻訳
2 K = N + 10
実行
0101010101111101
アセンブルする
(翻訳する)
インタプリタ型言語
というソフトで
実行
というソフトで
0111110101010101
翻訳 3 PRINT "Hello"
実行
コンパイルの処理工程
機械語(マシン語)
1010111110001111
0101111001010101
0111101101010101
0111110101010101
コンパイラ言語
main(void){
printf("hello,world¥n");}
目的(オブジェクト) 原始(ソース)プログラム
プログラム
コンパイルする コンパイラ
というソフトで
(翻訳する)
Int a; a = 5;
a = 10;
Int a; a = 5;
a = 10;
Int a; a = 5;
a = 10;
Int a; a = 5;
a = 10;
0111101101010101
0111110101010101
Windows
1010111110001111
0101011111110000
翻訳
MacOS
0011110101011110
1011111011110000
翻訳
Linux
1111010101111111
1010111110000000
翻訳
System.out.println
("Hello, world!");
CPUが違えば
機械語も違う
OSが違いを吸収するが
OS間でもコードが違う
4
手続き型言語
Windows
1010111110001111
0101011111110000
仮想 System.out.println
マシン ("Hello, world!");
#include <stdio.h>
仮想
マシン
int main(void)
{
printf("Hello, world!");
return 0;
}
MacOS
0011110101011110
1011111011110000
Linux
1111010101111111
1010111110000000
関数型言語
仮想
マシン
Dsfherimxqoqwe;w
e39234jdjdfnlsnjgef
中間コード
論理型言語
オブジェクト指向型言語
親子(舟,サザエ).
親子(サザエ,タラ).
?- 親子(舟,x).
x=サザエ.
孫(_祖母,_孫) :親子(_祖母,A),
親子(A,_孫).
?- 孫(舟,Y).
Y=タラ.
public class Hello {
public static void main
(String [] args) {
System.out.println
("Hello, world!");
}
}
(format t "Hello, World¥n")
(+ 10 20)
(setq a 999)
(+ a 1 20)
(setq b nil)
(if nil 0 1)
スクリプト言語
#!/usr/bin/perl
print "Hello, world!¥n";
print <<"_HTML_";
<body>Hello world</body>
_HTML_
マークアップ言語
<顧客>
<氏名>山田太郎</氏名>
<宛先>
<郵便番号>001-0001</郵便番号>
<住所>札幌市白石区菊水</住所>
</宛先>
</顧客>
5