100万ドルの問題
(アルゴリズムとグラフ理論)
湯沢高校 アドバンスト講義
2007年9月19日(水)
秋田県立大学 草苅良至
1
100万ドルの問題を教えます。
問題に懸賞金が付いてます。
問題を解けば、
100万ドルが手に入ります。
関連のサイト(英語)
http://www.claymath.org/millennium/
2
3
目次
I部 アルゴリズムの世界
II部 グラフ理論とアルゴリズム
4
I.アルゴリズムの世界
5
1.アルゴリズム入門
アルゴリズム:問題をとくための、 (有限回の機械的な)手順。
アルゴリズムの性質
あいまい性が無い。
有限のステップで終了する。
6
アルゴリズム例:10進数から2進数への変換
入力
出力
人間が理解
しやすい数
D = (dn - 1dn - 2 L d1d0 )10
B = (bm - 1bm - 1 L bb
1 0 )2
(19)10 Û (10011)2
(1989)10 Û (11111000101)2
(2007)10 Û (11111010111)2
コンピュー
タが理解し
やすい数
10進数と2進数
di Î {0,1, 2, 3, 4, 5, 6, 7, 8, 9}
各桁の数字は、その位
の値が何個あるのかを
示している。
D = (dn - 1dn - 2 L d1d 0 )10
= dn - 1 ´ 10n - 1 + L + d1 ´ 101 + d 0 ´ 100
各桁の数字は、その位
の値が何個あるのかを
示している。
bj Î {0,1}
B = (bm - 1bm - 2 L b1b0 )2
= bm - 1 ´ 2
m- 1
+ L + b1 ´ 2 + b0 ´ 2
1
0
8
(19)10 = 1 ´ 10 + 9 ´ 10
1
0
= 10 + 9
16 + 2 + 1
= 1´ 2 + 0 ´ 2 + 0 ´ 2 + 1´ 2 + 1´ 2
4
3
2
1
= (10011)2
9
0
2進数変換アルゴリズム
初期設定
D0 := D, i = 0 とする。
[step2]: Di > 0 の間以下を繰り返す;
2で割った余り
(2-1) b := D mod 2
i
i
2で割った商
(2-2) Di + 1 := ê
ú
D
/
2
ë i
û
[step1]:
(切り捨て)
(2-3)
[step3]: B
i := i + 1
i
を1増加させる。
を出力して終了する。
= (bm - 1 L bb
)
1 0 2
10
開始
D0 = D,
i= 0
偽
Di > 0
真
bi = Di
(mod 2)
Di + 1 = êëDi / 2ú
û
i= i+1
B = (bm - 1bm - 1 L bb
1 0 )2
として出力。
終了
11
実行例
19の2進数は?
19割2は、
商が9で余りが1.
b0 := 19 mod 2 = 1
19/2 =9
9/2 = 4
4/2 = 2
2/2 = 1
1/2 = 0
;1
;1
;0
;0
;1
下位ビット
D1 := êë19 / 2ú
û= 9
上位ビット
(19)10 = (10011)2
12
2.アルゴリズムの正当性
(なぜ、正しく2進数にしてくれるのか?)
D = D0 = bm - 1 ´ 2m - 1 + L + b1 ´ 21 + b0 ´ 20
ææ
ö
ö
÷
çççç
÷
÷
÷
ö
÷
÷
ççççæ
÷
÷
÷
ç
÷
÷
÷
÷
= çççççç(bm - 1 )´ 2 + bm - 2 ÷
´
2
+
L
´
2
+
b
÷
1 ÷´ 2 + b0
÷
÷
çççççç{
÷
÷
÷
÷
÷
è
ø
D
m- 1
÷
÷
çççç144444442
4444444
3
÷
÷
÷
÷
çèè
ø
Dm - 2
144444444444444442 44444444444444443ø
D1
144444444444444444444
2 444444444444444444443
D0
= D1 ´ 2 + b0
除算における商
と余りの関係式
13
(19)10 = (9)10 ´ 2 + 1
奇数なので1余る
= ((4)10 ´ 2 + 1)´ 2 + 1
=
=
(((2)10 ´ 2 + 0) + 1)´ 2 + 1
((((1)10 ´ 2 + 0)´ 2 + 0)´ 2 + 1)´
=
((((1)
2
2+ 1
´ 2 + 0)´ 2 + 0)´ 2 + 1)´ 2 + 1
= (((10)2 ´ 2 + 0)´ 2 + 1)´ 2 + 1
= ((100)2 ´ 2 + 1)´ 2 + 1
= (1001)2 ´ 2 + 1 = (10011)2
14
3.アルゴリズムの性能評価
(どのくらいの時間で終了するのか?
≒繰り返し回数は何回か?)
D = (bm - 1 L bb
1 0 )2
のときの繰り返し回数を調べよう。
アルゴリズムより繰り返し回数は、出力のビット数
m回
である。この回数を入力の桁数
の関数として表したい。
n
15
m- 1
2
£ D = (bm - 1 L bb
1 0 )2 < 2
m
各辺で2を底として対数をとる。
m - 1 £ log2 D < m
底の変換公式
\ log2 D < m £ log2 D + 1
1
1
\
log10 D < m £
log10 D + 1
log10 2
log10 2
\ 3.32n < m £ 3.33n + 1
繰り返し数 m は桁数 n に比例する。
16
プログラムにすると
桁数
n
に比例する時間で終了する。
O  n  時間(線形時間)のアルゴリ
ズムといいます。
17
アルゴリズムとプログラム
アルゴリズム
+
プログラミング
プログラム
プログラム言語
データ構造
2進数変換アルゴリズム
+
整数型データ
C言語風プログラム
intは整数のデータ型。
int * bin(int D){
int B[100];
Di=D;i=0;
while(Di>0){
B[i]=Di (mod) 2;
Di=Di/2;
i=i+1;
};
return B;
}
18
プログラムとアルゴリズムの計算時間
while(Di>0){
B[i]=Di (mod) 2;
Di=Di/2;
i=i+1;
};
加減乗除の四則演算
代入演算
不等号や等号の成立判定
等は全て一定の時間で行える
(コンピュータにより違う。)
繰り返し回数が重要
アルゴリズム評価では、比例
定数は無視される。
(コンピュータに依存しない評
価法)
19
4.様々なアルゴリズム
• 最大公約数を求めるユークリッドの互
除法
• 素数を求めるエラトステネスのふるい法
アルゴリズム例2
ユークリッドの互除法(自然数A,Bの最大公約数
gcd(A,B)を求めるアルゴリズム)
初期設定
P = A;Q = B とする。
[step2]: R = P mod Q
[step1]:
[step3]:
Qで割った余り
R > 0 の間以下を繰り返す;
(3-1) P = Q ;Q = R とする。
x i + 1 :=
0
R = P mod Q とする。
[step3]: Q = gcd(A, B ) として出力する。
(3-2)
x i + 1 :=
P :被除数
0
Q :除数
R :余り
21
開始
P :被除数
Q :除数
R :余り
P = A;Q = B
R = P mod Q;
偽
R > 0
真
P = Q ;Q = R ;
R = P mod Q ;
Q = gcd(A, B )
として出力。
終了
22
実行例
A = 36, B = 21
P
Q
R
36 =
21 ´ 1 + 15
21 =
15 ´ 1 + 6
15 =
6´ 1
+3
6=
3´ 2
+0
\ gcd(36, 21) = 3
割り切れたと
きのQが最大
公約数
23
ユークリッド互除法の評価
ユークリッドの互除法は、
小さい数( B )の桁数 n に比例する時間
( O  n  時間)
で正しく、最大公約数 gcd( A, B)
を求める。
このアルゴリズムを少し修正することにより、
最小公倍数
も求められる。
lcm( A, B)
24
アルゴリズム例3
エラトステネスのふるい法(自然数A以下の素数
をすべて求めるアルゴリズム)
2~ A までのセルを持つ表 P を用意する
[step2]:各 i, 2 £ i £ A に対して、
[step1]:
セル P [i ] にTRUEをセットする。
[step3]:
m = 2 とする。
[step4]:
m < A である限り以下を繰り返す。
(4-1)各i, m < i £ A に対して 、i が m で割り
切れれば、P [i ] = FA LSE とする。
(4-2) P [i ] = T RUE である m の次に大きい要 25
素 i で m を更新する。
開始
P = A;Q = B
i mod m = 0
偽
R = P mod Q;
真
P [i ] = FA LSE
m < A
真
偽
終了
P [i ] = T RUE となる
m
m
の次の要素 i
を更新する。
で
26
実行例
A = 30
2
3
4
5
6
7
8
9
10
11 12 13 14 15 16 17
18 19
20
21 22 23 24 25 26 27
28 29
30
m = 2
2
3
5
7
9
11
13
15
17
19
21
23
25
27
29
27
m = 3
2
11
3
5
13
23
7
17
25
19
29
m= 5
2 3
11
13
23
5
7
17
19
29
28
m = 7,11,13,17,19, 23, 29
2 3
11
5
13
23
7
17
19
29
以上より、
{2, 3, 5, 7,11,13,17,19, 23, 29}
が30以下の素数である。
29
エラトステネスのふるい法の評価
エラトステネスのふるい法は、
数 A の桁数 n に対して、指数時間
n
( O 10 時間)
かかってしまうアルゴリズムである。
 
30
5.アルゴリズムの分類と問題の分類
• アルゴリズムは計算時間(繰り返し回数)
により分類される。
• 問題は、問題を解くアルゴリズムにより分
類される。
31
入力
サイズ
アルゴリ
ズム
A
B
C
n log n n 2
n
n = 10
1.0 ´ 10
15
20
30
1.5 ´ 10
50
100
500
- 7
3.3 ´ 10
- 7
0.6 ´ 10
D3
n
En
2
- 7
1.0 ´ 10 1.0 ´ 10 1.0 ´ 10
- 5
0.04
- 6
2.3 ´ 10 0.3 ´ 10
- 6
- 4
3.3 ´ 10
- 4
3.6(h )
- 6
0.4 ´ 10 0.8 ´ 10
- 4
1.1 ´ 10
- 2
772(y )
- 6
- 6
- 5
2.0 ´ 10
- 7
0.8 ´ 10
3.0 ´ 10
- 7
1.5 ´ 10
0.9 ´ 10 0.3 ´ 10
- 3
5.0 ´ 10
- 7
- 6
- 5
2.8 ´ 10 1.6 ´ 10 1.3 ´ 10
- 3
- 6
6.6 ´ 10 1.0 ´ 10
- 4
1.0 ´ 10
5.0 ´ 10
- 6
F
n!
- 6
- 5
- 5
4.5 ´ 10 2.5 ´ 10
- 5
- 3
11
4 ´ 1014(y )
0.01
1.3
1000 1.0 ´ 10- 5 0.1 ´ 10- 3 1.0 ´ 10- 2
10
2.8(h )
10000 1.0 ´ 10- 4 1.3 ´ 10- 3 1.0
10 5 1.0 ´ 10- 3 1.7 ´ 10- 2
116(d )
100
- 8
100MIPSの計算機(1命令あたり 10 秒)
単位:秒(sec)
32
入力サイズと計算時間
指数時間アルゴリズム
ア多
ル項
ゴ式
リ時
ズ間
ム
33
log n
1000log n
2log n
O(log n)
対数(時間)
n
n
10n
1000n
O ( n)
2
100n
k
2n
n
3
10n 2
O(n2 )
n
k
c
k
O(n )
多項式(時間)
n
O(cn )
34
指数(時間)
アルゴリズムの分類
エラトステネス
のふるい 法
基数変換アルゴリズム
ユークリッドの互除法
多項式(時間)
O ( n)
O(cn )
指数(時間)
35
問題の分類
基数変換問題
素数発見問題
最大公約数計算問題
O ( n)
多項式(時間)
O(cn )
指数(時間)
36
素数発見問題は難しい
素数発見問題
11438162575788886766923577997614661201
02182967212423625625618429357069352457
33897830597123563958705058989075147599
290026879543541
以下の最大の素数を求めよ?
桁数が大きいとエラトステネスの
ふるい法は役にたたない。
37
アルゴリズム論で考える事
いろんな問題をコンピュータに解かせる場合に、
どんな手順で処理をすすめたらいいのか考える。
(アルゴリズムの設計といいます。)
アルゴリズムをプログラムに直した場合に、
どのくらいの時間で終了するのかを考える。
(アルゴリズムの解析といいます。)
そもそも、計算機で解ける問題とは、
どのような問題なのかを考える。
つまり、アルゴリズムがあるのかどうかを考える。
(計算量理論といいます。)
38
II.グラフ理論とアルゴリズム
39
1.グラフ理論入門
グラフ:いくつかの点集合と、それらを結
ぶいくつかの辺から構成される図形
いくつかの点
2点間を結ぶ辺
グラフの例
40
なんでグラフとか考えるの?
グラフ:いろいろなものを単純に抽象化して
考えることができる。
現実世界とグラフ
(1)ネットワーク
点: コンピュータ
辺:配線
コンピュータ3
コンピュータ1
コンピュータ2
41
(2)路線図
点:駅
辺:路線
盛岡
田沢湖線
東北本線
大曲
秋田
羽越本線
北上
奥羽本線
北上線
本荘
余目
横手
陸羽西線 新庄
陸羽東線
小牛田
42
(3)道路地図
点:交差点
辺:道路
43
(4)回路図
点:分岐点
辺:素子

~
44
(5)友達関係図
点:人間
辺:友達関係
A
A君とB君は友達だけど、
A君とE君は友達でない。
B
D
C
F
E
G
H
45
(6)UNIXのファイル構造
点:ディレクトリまたはファイル
辺:包含関係、位置関係
/
bin
usr
bin
tmp
home
b08b001
report.txt
etc
passwd
hosts
kusakari
initial.html kadai.c
46
2.グラフの仲間
有向グラフ
いくつかの点
今までのグラフ
は無向グラフ
2つの点を結ぶ
いくつかの有向辺
有向グラフの例
47
現実世界と有向グラフ
(1)一方通行のある道路地図
点:交差点
辺:一方通行路
48
(2)恋愛感情の図
点:人間
辺:恋愛感情
A
D
A君はBさんを好きだけど、
BさんはCさんが好き。
B
C
F
E
G
H
49
多重グラフ
いくつかの点
今までのグラフ
は無向グラフ
2つの点を結ぶ
いくつかの多重辺
多重グラフの例
50
グラフ理論で考えること、
平面上に書けるグラフってどんなのだろう?
(グラフの平面性判定といいます。)
隣接している国同士は違う色で塗るとしたら、
何色必要なの?
(彩色問題といいます。
その中で、4色問題が結構有名です。)
ネットワークで、
途中のコンピュータが何台まで故障しても、
相手のコンピュータと通信できるの?
(グラフの連結度といいます。)
51
3.オイラー回路問題
さて、グラフ上の問題を解くアルゴリズムを考えてみましょ。
一筆書きの図形はグラフとみなせる。
図形をグラフとみなしたとき、そのグラフは一筆書きできるの?
52
オイラー回路とは?
始点と終点が
等しい。
オイラー回路
始点、終点
が異なる
一筆がきできる。
一筆がきできない。
53
オイラー回路の例
54
オイラー回路問題
グラフGが与えられたとき、そのグラフにオイラー回路が
あるか判別せよ。
つまり、グラフGは、任意の点を始点として、
一筆がきできるか判別せよ。
3
1
4
10
9
5
11
12
6
2
8
2
1
5
3
7
n :点数、 m:辺数
6
7
4
8
55
単純なアルゴリズム
辺 順列法(順列によるオイラー回路判定法)
step1:全ての辺に番号をつける。
step2:1-mの数字を適当にならべる。
step3:ならべた数字に対応する辺の順序で、
一筆書きできるかしらべる。
step4:全てのならべ方を調べてなければ、
step2に戻る。
3
1
4
10
9
5
11
12
6
2
8
7
1 2 3 4 5 6 7 8 9 10 11 12
1 3 4 10 9 12 11 5 6 7 8 2
56
辺順列法の手間(計算量)
m個の数字の並べ方は、m!であるので、
m!に比例する手間がかかる。
ちなみに、
m! > 2
m
(m>=4 のとき)
辺順列法は 指数時間アルゴリズムであるという。
100MIPSの計算機としましょ。
(1秒間に100万回の計算ができる。)
辺数mと計算時間
m
10
m
2
0.00005秒
20
0.01秒
30
40
50
10秒
3時間
130日
m!
0.04秒
771年
57
グラフ理論を使った高速化
定理1
グラフGにオイラー回路があるための、必要十分条件は、
(Gが連結で)Gのすべての 点の次数が偶数であること。
4次の点
非連結グラフ
次数:接続する辺の本数
58
次数による一筆書きの分類
奇次数の点数
0
始点と終点が
等しい。
オイラー回路
2
4以上
奇次数の点
が始点と終点
になる
一筆がきできる。
一筆がきできない。
59
次数法(次数によるオイラー回路判定法)
step1:点の次数が偶数かどうか調べる。
step2:全ての点を調べてなければ、step1にもどる。
m
O(m )
に比例した計算時間。( O(m ) 時間)
20
0.0000001秒
0.0000002秒
0.04秒
771年
30
0.0000003秒
次数法は、辺数
m
10
O (m !)
40
50
1000
1万
0.00001秒
0.0001秒
多項式時間アルゴリズム
指数時間アルゴリズム
ずいぶん賢くなった。めでたし、めでたし。
60
4.ハミルトン閉路問題
さて、オイラー回路と似た別の問題を考えよう。
同じ辺を1度しか通らずに全ての辺を1度は通る回路が、
オイラー回路である。
同じ点を1度しか通らずに全ての点を1度は通るような閉路を
ハミルトン閉路という。(オイラー回路は、同じ点を何度も通っていた。)
61
ハミルトン閉路の例
62
○
ハミルトン閉路あり
×
ハミルトン閉路なし
63
64
ハミルトン閉路問題
グラフGが与えられたとき、そのグラフにハミルトン閉路が
あるか判別せよ。
1
2
5
6
8
4
7
3
n :点数、 m:辺数
65
単純なアルゴリズム
点順列法(順列によるハミルトン閉路判定法)
step1:全ての点に番号をつける。
step2:1-nの数字を適当にならべる。
step3:ならべた数字に対応する点の順序で、
ハミルトン閉路ができるか調べる。
step4:全てのならべ方を調べてなければ、
step2に戻る。
1
2
5
12345678
6
8
4
12376582
7
3
66
ハミルトン閉路問題の評価
ハミルトン閉路を解く点順列法は、
指数時間( O  n! 時間)
かかってしまうアルゴリズムである。
ハミルトン閉路問題を解く高速なアルゴリズムは?
実は、この問題が現在のコンピュータサイエンスの
最大の未解決問題です。
だれも、ハミルトン閉路問題を解く
高速な(多項式時間の)アルゴリズムを作れていない。
67
問題の分類
指数(時間)
多項式(時間)
基数変換問題
最大公約数計算問題
オイラー回路問題
素数発見問題
O(nk )
ハミルトン閉路問題
68
5.100万ドルの問題
「ハミルトン閉路問題を解く多項式時間アル
ゴリズムが存在するか?」
答えの
可能性
存在する。
まだ誰も見つけていない
だけ。
存在しない。
これから未来永劫誰もアル
ゴリズムを設計できない。
69
クラスPの問題
クラスPに属する問題の特徴。
問題から答えを求めることが容易
(多項式時間 Polynomial time Algorithm
で問題を解くアルゴリズムが存在)
例 :2進数変換、最大公約数、オイラー回路問題等
70
クラスNPの問題
クラスNPに属する問題の特徴。
厳密な定義は
省く。
問題と答えが両方与えられたら、答えのチェックは容
易に行える。
(多項式時間でチェックが行える。問題から答えを求め
ることは計算量が多くてもかまわない。
Nondeterministic Polynomial time Algorithm が存在。)
例 :2進数変換、最大公約数、オイラー回路問題、
素数発見問題、ハミルトン閉路問題、因数分解問題等
71
他のNP問題
因数分解問題
11438162575788886766923577997614661201
02182967212423625625618429357069352457
33897830597123563958705058989075147599
290026879543541
チェック(掛け算)
34905295108476509491478496199038981334
17764638493387843990820577
×
32769132993266709549961988190834461413
177642967992942539798288533
72
クラスNP完全の問題
クラスNP完全に属する問題の特徴。
厳密な定義は
省く。
(1)問題と答えが両方与えられたら、答えのチェックは容易に
行える。(クラスNPの特徴)
(2)この問題を解く多項式時間アルゴリズムが発見されれば、
クラスNPに属するすべての問題が多項式時間で溶ける。
(NP完全独自の特徴)
例 ハミルトン閉路問題、巡回セールスマン問題
73
問題の難しさの階層
指数時間
NP完全
ハミルトン閉路問題
NP
P
難しい
オイラー閉路問題
最大公約数
因数分解
74
P vs NP 問題
(計算機科学最大の問題)
答えを多項式時間でチェックできる問題(NP問題
)には、すべて答えを多項式時間で求めるアルゴ
リズムが存在する(Pに属する)のか?
もし、ハミルトン閉路問題を解く多項式時間アルゴリズムを見つ
ければ、P vs NP問題を解いたことになる。
コンピュータサイエンスの
チューリング賞間違いなし ノーベル賞のようなもの。
P=NP問題またはPNP問題ともいう。
75
「P vs NP問題」
等価
「ハミルトン閉路問題を解く多項式時間アルゴリズムが存在
するか?」
存在する。
P=NP
答えのチェックできる問題は、
解くことができる。
存在しない。
P≠NP
答えのチェックと問題を解くこと
は本質的に異なる。(計算量が
76
違う)
まとめ
アルゴリズム論を紹介した。
グラフ理論を紹介した。
P=NP問題という現在のコンピュータサイエンス(情報科学)
最大の未解決問題を紹介した。
100万ドル(1億円)の懸賞が付いています。
77
参考文献
(1)中村亨、「数学21世紀の7大難問(数学の未来をのぞいてみよう)」、
(ブルーバックス)、2004、講談社、ISBN 4-06-257429-2
(2)一松信ほか、「数学7つの射解決問題(あなたも100万ドルにチャレンジしよう)」、
2002、森北出版、ISBN 4-627-01961-0
78
ダウンロード

2.2ブール代数の基本事項