• 検索結果がありません。

アルゴリズム入門(1)

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズム入門(1)"

Copied!
45
0
0

読み込み中.... (全文を見る)

全文

(1)

宮崎修一

京都大学 学術情報メディアセンター

アルゴリズム入門( 1 )

(アルゴリズムの基礎)

(2)

アルゴリズムとは?

問題を解く手順、算法(あとで具体例)

問題とは?

入力と、それに対する出力がきっちり決まっているもの。

(与えられた入力に対して、正しい出力を計算することを 要求する。)

(3)

3

例1:最大公約数を求める問題 入力:正の整数 x y

出力:x y の最大公約数

入力 (10, 8)出力 2 入力 ( 3, 8)出力 1 入力 ( 5,10)出力 5 例2:ソーティング(並べ替え)

入力:n個の正の整数

出力:小さい順に並べ替えたもの

入力 10,9,2,6,4,1,8,3

出力 1,2,3,4,6,8,9,10

(4)

もっと身近(実用的)な例

・文字列検索

入力:文章と検索文字列

出力:文章中で文字列が含まれる位置

(5)

5

・メールソフトの並べ替え 入力:たくさんのメール

出力:指定された順序に従った並べ替え

(6)

・WEBページ検索 入力:キーワード

出力:キーワードに関係の深いWEBページ

(7)

7

アルゴリズムの例(最大公約数を求める問題)

ユークリッドの互除法 (世界最古のアルゴリズム)

入力 x, y (x>y)

ステップ 1: x y で割って、余りを r とする。

ステップ 2: r = 0 ならば、y を出力して終了。

r ≠ 0 ならば、ステップ3へ。

ステップ 3: x ← y y x に代入)

y ← r r y に代入)

ステップ1へ。

(8)

ユークリッドの互除法の動作例 入力 (10, 8)

ステップ 1: 10÷8=1 余り2

ステップ 2: r=20でないのでステップ3へ。

ステップ 3: x=8y=2。ステップ1へ。

ステップ 1: 8÷2=4 余り0 ステップ 2: r=0なので終了。

このとき、y =2なので、2を出力。

x y r (10, 8) 2

(8, 2) 0

(9)

9

ユークリッドの互除法の動作例 入力 (8, 3)

ステップ 1: 8÷3=2 余り2

ステップ 2: r=20でないのでステップ3へ。

ステップ 3: x=3y=2。ステップ1へ。

ステップ 1: 3÷2=1 余り1

ステップ 2: r=10でないのでステップ3へ。

ステップ 3: x=2y=1。ステップ1へ。

ステップ 1: 2÷1=2 余り0 ステップ 2: r=0なので終了。

このとき、y =1なので、1を出力。

x y r

(8, 3) 2 (3, 2) 1 (2, 1) 0

(10)

ユークリッドの互除法は、入力(10, 8)(8, 3)に対しては 正しく動作することが分かった。

しかし、アルゴリズムは、どんな入力に対しても正しく動作 しなければならない。

どんな入力に対しても正しく動作することの証明 入力 x, yに対して、正しい答を d とする。

(つまり、x = ds, y = dt で、stは互いに素)

(11)

11

ステップ 1: x y で割って、余りを r とする。

まず、r =0ならば、yが最大公約数なのは簡単に分かる。

なので、r ≠0の場合を考える。

x = uy + r uは商)

ds = udt + r r = ds - udt

= d (s- ut)

x = ds, y = dt で、stは互いに素

y = dt, r = d (s- ut) である。

ts- utは互いに素であることを言う。

もし、共通素因数を持ったら。。。それを a として、

t= ap, s- ut = aq と書ける。

s= aq + ut = aq + uap = a(q+up)

となり、stが素因数 a を持つので、stが互いに素である ことに反する。

(12)

y = dt, r = d (s- ut) である。

ts- utは互いに素である。

y r の最大公約数も d

ステップ3では、y r を新しい x y にして、ステップ1に戻る。

y r の最大公約数を求めに行っている。

要約すると:

r =0 ならば y が答で、それをステップ2で出力する。

r ≠0 ならば、x y の最大公約数は y r の最大公約数なので、

次のラウンドで y r の最大公約数を求めに行く。

(答を保存している。)

(13)

13

例えば(10, 8)のケース (10, 8) の最大公約数

(8, 2) の最大公約数

↓ 2

例えば(8, 3)のケース (8, 3) の最大公約数

(3, 2) の最大公約数

(2, 1) の最大公約数

↓ 1

x y r

(10, 8) 2 (8, 2) 0

x y r

(8, 3) 2 (3, 2) 1 (2, 1) 0

(14)

アルゴリズムは、正しい答を出力するか、または、答を保存する ことは分かった。

つまり、出力したときは、それが正しい答であることは保証される。

しかし、これだけでは、常に答を出力することの保証にはなって いない。(無限に答を保存し続ける可能性がある)

停止性の証明:

ステップ 1: x y で割って、余りを r とする。

なので、r < y

ステップ3で、x ← y, y ← r のときに、yの値は必ず小さくなる。

しかし、絶対に負にはならないので、どこかの時点で必ず0になる。

アルゴリズムは必ず終了する。

(15)

15

ステップ 1: x y で割って、余りを r とする。

ステップ 2: r = 0 ならば、y を出力して終了。

r ≠ 0 ならば、ステップ3へ。

ステップ 3: x ← y y x に代入)

y ← r (r y に代入)

ステップ1へ。

アルゴリズムとプログラム

アルゴリズムは、計算の手順を書いたもの。(たとえば、日本語、

英語など。) プログラムは、それが計算機上で実行できるように 具体的なプログラミング言語(例えばCJAVAなど)で書いたもの。

while(r!=0) {r:=x;

for (r>=y) {r:=r-y;}.

x:=y; y:=r;}

print(y);

アルゴリズム プログラム

(16)

問題

:

ユークリッドの互除法を使って、

次の

2

数の最大公約数を求めよ。

(a) 1470

63

(b) 89

55

(17)

17

安定マッチング問題 就職斡旋会

参加者

学生:

1 , 2 , 3 , 4 , 5

会社:

a, b, c, d, e

イベント終了後に、

5

組のペアを作りたい。

これを、「マッチング」と言う。

各参加者に、希望を出してもらう。

別の例

(18)

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

安定マッチング問題 学生:

1 , 2 , 3 , 4 , 5

会社:

a, b, c, d, e

それぞれの人は、左から右に向かって、好きな 相手を順番に書いている。

(19)

19

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

これは、なかなか良い。全員が第3位以内とペアになっている。

全員が第2位以内とペアになるマッチングは存在しない。

問題:なぜ?

(20)

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

ところが、このマッチングには欠点がある。

(1, e)は、今の相手よりお互いが好き。今のマッチングに

逆らって、「駆け落ち」する可能性がある。

こういうペアを「ブロッキングペア」と呼ぶ。

ブロッキングペアがあるとマッチングが壊れる不安定 問題:何が欠点?

ブロッキングペアのないマッチング:安定マッチング

(21)

21

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

問題: この例に対する安定マッチングを求めよ。

(22)

22

安定マッチングはどういうところで使われているの?

例:大学での研究室配属

研究室A(定員3名)

アルゴリズム

研究室B(定員4名)

インターネット

研究室C(定員3名)

画像処理

。。。

aさん bさん cさん

eさん dさん

。。。

a: A D B C b: E A B D c: F B C A d: B A C F e: C B F C

A: g f c b a e …

B: d b c a f e g …

C: b e d c f e a …

どの研究室に行きたいかの

希望リストを書く どの学生に来て欲しいかの 希望リストを書く

これらの希望リストを使って 安定マッチングを求める

(23)

23

例:日本の研修医マッチング(JRMP) https://www.jrmp.jp/

2004年にスタート(アメリカでは1950年代から)

8,500人の研修医を1,000病院の10,00011,000ポストに配属 医学部を卒業して医師国家試験に合格した医師は、2年間

どこかの病院で研修を行う。どの病院に行くかの配属を決めるもの。

(24)
(25)

25

例:腎臓交換移植

Aさんが腎臓病の息子a ために腎臓を提供したいが、

型が合わない。

Bさんが腎臓病の弟b

ために腎臓を提供したいが、

型が合わない。

A

a

B

b

× ×

ところが、Aさんがbさんに、Bさんがaさんにだったら 型が合う。

このとき、A-a B-b で腎臓を交換して移植すると、

どちらもハッピー。

(26)

例:腎臓交換移植 A

a

B

b

× ×

C

c

D

d

× ×

E

e

F

f

× ×

Y

y

×

Z

z

×

B

b

×

D

d

×

移植したいけど型が合わない(不幸な)ペア

C

c

×

Y

y

×

F

f

×

Z

z

×

ペア同士のペア(マッチング)を作って交換する。

これまで助からなかった者が助かる。

(27)

27

2012

年 ノーベル経済学賞

Lloyd S. Shapley

安定配分の理論とマーケットデザインの実践

・安定マッチングの理論研究

・その結果を世の中のマッチングに応用

(研修医配属、学校配属、腎臓交換移植など)

Alvin E. Roth

(28)

素朴な疑問

さっきの例には「たまたま」

安定マッチングがあったが、

どんな場合でも安定 マッチングはあるの?

・誰かの希望リストが今のと違っていたら?

・今の例は5人対5人だったが、10人対10人では?

100人対100人では?

安定マッチングは必ずある。人数がどれだけ増えても、

どんな希望リストであっても、必ずある。

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

(29)

29

単純なアルゴリズム:

マッチングを全て求めて、それぞれが安定かどうかを 1個ずつチェックする。

1-a 2-b 3-c 4-d 5-e

1-a 2-b 3-c 4-e 5-d

1-a 2-b 3-d 4-c 5-e

1-a 2-b 3-d 4-e 5-c

1-a 2-b 3-e 4-d 5-c

安定なマッチングが見つかった所で、それを出力する。

安定マッチングを求めるには、どうしたらいいか?

全部のマッチングを調べているので、必ず答は求まる。

(30)

計算時間は、どれぐらい掛かるだろうか?

問題:学生5人、採用担当5人の場合、マッチングは何通りある?

1-a 2-b 3-c 4-d 5-e

1-a 2-b 3-c 4-e 5-d

1-a 2-b 3-d 4-c 5-e

1-a 2-b 3-d 4-e 5-c

1-a 2-b 3-e 4-d 5-c

ここの異なる順列に、異なるマッチングが 11に対応するので、全部で5!(=120)通り。

学生n人、会社n個だと n! 通り。

(31)

31

宇宙の年齢≒138億年 < 1011 1時間 = 3,600

1 86,400

1 31,536,000秒 < 108

1秒間に1(=10 )個のマッチングを生成し、

その安定性をチェックできたとしても、1032秒以上かかる。

8

1032 > 1024 n!ってどれぐらい?

n 1 2 5 10 50

n! 1 2 120

50! > 1040

宇宙の年齢の10,000,000,000,000回分待っても答えが出ない。

3,628,800 50!

(32)

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

32

安定マッチングを求める Gale-Shapley アルゴリズム

×

× ×

×

問題:どうしてこのアルゴリズムで安定マッチングが求まる?

もっと速く求めることはできないか?

n 2 ステップで終わる

(33)

33

求まったマッチングが安定でないとすると、

ブロッキングペアが存在する。

2: ・ ・ ・ e ・ ・ ・ e: ・ ・ ・ 2 ・ ・ ・ 学生2は会社eに申請したが断られた。

(学生はリストの前から順番に申請するので)

e: ・ ・ ・

×

2 ・ ・ ・

その時点では、会社eは学生2よりも良い人を得ていた。

それ以後、会社が相手を変える場合は、

より良い相手にしか変えない。

最終的に学生2より下の会社とペアになっているのは矛盾。

(証明終わり)

×

(安定性の証明)

(34)

n 1 2 5 10 50

n 1 4 25 100 2,500

n! 1 2 120 3,628,800 > 10

2

1秒間に1億個のマッチングを生成し、その安定性をチェック できたとしても、1032秒> 10 24年かかる

宇宙の年齢≒138億年 < 1011

1秒間に1億ステップ計算できるなら、

0.000025秒で終わる

40

(35)

35

アルゴリズムの時間計算量

できるだけ速く答を求めるアルゴリズム=良いアルゴリズム。

n 2 < 2n < n! (≈ )

多項式時間アルゴリズム(n c の形のもの)

指数時間アルゴリズム(c n の形のもの)

超指数時間アルゴリズム 効率の良い

アルゴリズム

(36)

「フカシギの数え方」

計算時間の爆発、アルゴリズムの効率を題材にした動画

JST ERATO

湊離散構造処理系プロジェクト

「アルゴリズムが世界を変える」

JST ERATO

河原林巨大グラフプロジェクト

(37)

37

アルゴリズム研究(の1つ)

問題に対して、できるだけ早いアルゴリズムを構築する。

[Rolf,05]

32216 .

1

Tamaki,04]

[Iwama, )

3227 .

1 ( 3238 .

1

[Rolf,03]

3280 .

1

] Schuler,03 [Baumer,

3290 .

1

al.,02]

et r [Hofmeiste 3302

. 1

,99]

[Schoening 334

. 1

al.,98]

et [Paturi 362

. 1

er,79]

Speckenmey [Monien,

618 . 1

n

n n

n n n n n n

・・・

n5 → n3 → n2 → n1.5 → …

2 → 1.8 → 1.7 → 1.4 → …n n n n

1つの例:

3SAT

[Iwama, Takai, Seto, Tamaki,10]

32113 .

1 n

[Hertli, Moser, Scheder , 10]

32065 .

1 n

[Hertli,11]

30704 .

1 n

(38)

38

計算量のより厳密な話

入力の「サイズ」:

入力の長さ。

例えば安定マッチング問題では、希望リストの長さの総和。

入力xの長さを | x | と書く。

操作の単位:

1ステップでどういう操作ができるか。

例えば安定マッチング問題では、

・学生mの第i希望がどの会社であるか調べる

・学生mと会社wをペアにする

・ペア(m, w)を解消する など。

もっと厳密にやると、チューリング機械を使う。

(39)

39

入力xに対する、アルゴリズムAの計算量:

Axを処理し終えるまでにかかるステップ数。

入力 x

に対して、Aが前ページで規定した操作を134回行ったら、

この入力に対するAの計算量は134 入力長nに対する、アルゴリズムAの計算量:

長さがnである入力全てに対するAの計算量の中の最大値。

) (x fA

) (n fA

max

|x|=n

f

A

( x )

= ) (n f

A

長さnのどんな入力に対しても、A fA(n)ステップで終わる。

1: c e a d b a: 4 1 3 2 5 2: a b c d e b: 5 1 2 3 4 3: a d c e b c: 2 3 1 5 4 4: b e d a c d: 3 4 2 5 1 5: d a e b c e: 3 1 5 2 4

(40)

40

入力長

) (n fA

一般に、 などのように、きれいな関数には ならない。

n2 5n

(41)

41

入力長

) (n fA きれいな関数で近似する

(有限個を除いて、全て曲線の下)

(42)

漸近的評価

n n

n n

fA( ) = 2 3 +5 +1.8log2 例えば、近似した後、

だったとしよう。

nの増加に対する計算時間の増加の度合いに着目して、

と書く。

) ( )

(n O n3 fA =

※nが大きくなると、 に比べて無視できる。

「増加の割合」に興味があるので、定数倍は無視する。

2n3 2 n

log 8 . n 1

5

厳密な定義は省略。

「最大次の項だけ残して、その項の係数を1にする。」

(43)

43

O記法の厳密な定義

) ( ),

(n g n 2つの関数 f

であること。

に対して、

(定数)が存在し、

(定数)、

であるとは、

) ( )

( )

(

)) ( ( )

(

0

0

n g c n

f n

n

n c

n g O n

f

=

問題:以下のうち正しいものはどれか? 正しいものについては、

上記の定義に乗っ取って、厳密に証明せよ。正しくないものに ついては、正しくないことを証明せよ。

) ( 2

2 ) 4 ( )

( 1

. 0 ) 3 (

) ( 20 5

) 3 2 ( )

( 10

3 5

) 1 (

3 2

2 4

3 3

n O n

n n

O n

n O n

n O n

n

= +

=

=

=

− +

        

       

(44)
(45)

45

参照

関連したドキュメント

計算量の評価法 9 問題例の規模 によって計算量が変わる ⇒問題例の規模に応じた評価

当たりが出たらそこで終わりなので、アルゴリズムの動作中

ある問題 $\Sigma$ に対し , 入力例を $\sigma$ とし また, 問題に 対するあるオンラインアルゴリズムを $A$ , 最適なオフライ..

32 歴史: プログラミング言語の誕生と発展 年代 代表的な言語 特徴 '50s FORTRAN, COBOL, LISP (現存する)最も初期のプログラミン グ言語が作られる '60s- '70s Simula,

各インスタンス変数の値が name と area である Island のインスタンスを作 成し、返す。 (前のものと同じ) void drawIslandSquare(I

シートとブックの基本的な説明・操作 シート シートは下図の    で囲まれたマス目(

授業の計画・内容

近年, Microsoft kinect を始めとするモーションジェ