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

アルゴリズム入門(9)

N/A
N/A
Protected

Academic year: 2021

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

Copied!
47
0
0

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

全文

(1)

宮崎修一

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

アルゴリズム入門( 9 )

(オンラインアルゴリズム)

(2)

2

オンラインアルゴリズム

これまでの問題は、入力が全て分かっているが、解の個数が 多いのでしらみつぶしに探すのが難しかった。

例えNP完全問題でも、時間さえ掛ければ最適解が求まる。

オンラインアルゴリズム

入力の一部しか分からないことにより、計算が難しい。

時刻とともに入力が次々に与えられる情況で、将来の 入力を知らずにその場の判断をしなければならない。

・株の売買

・新幹線の座席予約

・コンピュータ上でのページング

・京都市バスの1日乗車券

(3)

オンラインアルゴリズムの性能は、競合比で表される。

入力σを最後まで読んだ後なら、最適解を計算できる

→OPT(σ

オンラインアルゴリズムAが入力σに対して得るコスト

→A(σ

「Aの競合比がc」とは、全てのσに対して、

A(σ

OPT(σ) ≦c

OPT(σ

A(σ) ≦c

(最小化問題の場合) (最大化問題の場合)

が成り立つこと。つまり、入力を最後まで見た場合のc倍以内 に常に収めることができること。

(4)

4

例:スキーレンタル問題

戦略1:ずっとレンタルし続ける。

100回行ったとき、100万円。

最初に買っていれば、5万円で済んだ。

100万/5万=20倍悪い。

(つまり競合比は20以上。実際は無限大。)

戦略2:2回目で買う。

2回しか行かなかったとき、1+5=6万円。

レンタルしていれば、2万円で済んだ。

6万/2万=3倍悪い。

(つまり競合比は3以上。)(ちょうど3であることも言える。)

これからスキーを始めるが、今後何回スキーに行くか分からない。

スキー板を買うべきか、レンタルすべきか?

・買うと5万円。

・レンタルすると、1回につき1万円。

・買ったスキーは、ずっと使い続けることが出来る(壊れない)。

(5)

戦略3:1~4回の間はレンタル。5回目に行くときに買う。

行く回数が4回以内のとき 行く回数が i 回だったとき

使うのは i 万円

最適解も i 万円(買うより安い)

→全く損をしない。

行く回数が5回以上のとき

使うのは4+5=9万円

最適は、最初に買って5万円

→比は9/5=1.8 戦略3の競合比は1.8

もっと良いアルゴリズムはあるか?

(6)

戦略3が最適アルゴリズムであることを示す。

アルゴリズムとしては、一度買ったらそれ以降それを使うのがまし。

なので、「何回目に買うか」でアルゴリズムは決まる。

k回目に買うとする。

すると、k回しか行かないという場合、

かかったお金は(k-1)+5=k+4万円

・1≦k≦4のとき、最適解は、毎回レンタルしてk万円 (k+4)/k=1+4/k≧2

なので、比が1.8よりも悪くなる。

k≧6のとき、最適解は、最初に買って5万円。

(k+4)/5≧2

なので、比が1.8よりも悪くなる。

よってk=5が最適。

(7)

k サーバ問題

消防車がk台ある。

火事の起こった場所に1台行かなければならない。

どこで火事が起こるか分からない。(同じ場所で複数回起こることもありうる。)

消防車の総移動距離を最小化する。

(8)

直感的に良さそうなもの。

最も近い消防車を行かせる。→ 貪欲アルゴリズム

(9)

問題:貪欲アルゴリズムにとって都合の悪い入力はあるか?

(10)

有名な予想(kサーバ予想)

kサーバ問題の競合比はk。」

現段階で知られていること。

kサーバ問題の競合比は2k-1以下。

kサーバ問題の競合比はk以上。

kサーバ予想が正しい特殊ケース。

k=2の場合

・ライン上

・木上

・要求点がk+1個しかない場合

・要求点がk+2個しかない場合

(11)

k+1個の要求点を用意

1 2

4 3

要求点 サーバ

どんなアルゴリズムでも、比がk になってしまう入力列が

あることを示す。(つまり、要求点がk+1個しかなくても難しい。)

アルゴリズムの動きに合わせて、「意地悪い」入力列を構築 していく。

k=3の例

(12)

12

サーバがk個で、要求点がk+1個。

サーバがいない要求点が必ずある。

意地悪い入力列では、常にそこを要求する。

1 2

4 3

要求点

i番目の要求の来た要求点を、r とする。

i

サーバ

今の例だと、r r r r r 2 4 1 2 3

dxy):xy の距離

(13)

アルゴリズムのコスト≧

d(r , r )+ d(r , r )+ d(r , r )+・・・+ d(r , r )

これはそんなに自明ではないので、良く考えてみよう。

1 2 2 3 3 4 n-1 n

r2r1 rr2

rr3 rr4

3 4 5

と動いている。

(14)

最適解は、これより少なくともk倍良いことを、これから示す。

複数(k個)のアルゴリズムを同時に走らせる。

それらのうち最良のものは、上記の性質を満たす。

これらk個のアルゴリズムは、動作ルールは皆同じ。

k個のサーバの初期配置が違うだけ。

iステップ目でr が要求されたとき、

既にそこにサーバがあれば、何もしない。

なければ、r から動かす。

i

i-1

※ただし、初期配置では、r1 にはサーバがあるものとする。

アルゴリズムに都合の悪い入力が出来たが、それにつられて 最適解も悪くなってはダメ。

(15)

1 2

4 3

要求点 サーバ

要求: 2 4 1 2 3

(16)

16

サーバがk個で、要求点がk+1個。

「状態」は、どこが空いているかで決まる。

初期配置はk+1通りあり得る。

しかし、r には必ずサーバがあることにしているので、

初期配置はk通り。

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

1

アルゴリズム1 アルゴリズム2 アルゴリズム3

3 1

は状態

(サーバのない場所)

(17)

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

1 2

4 3

1 2

4 3

1 2

4 3

要求2

3 1

(18)

18

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

1 2

4 3

1 2

4 3

1 2

4 3

要求4

3 1

3 1

(19)

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

1 2

4 3

1 2

4 3

1 2

4 3

要求1

3 1

(20)

20

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

1 2

4 3

1 2

4 3

1 2

4 3

要求2

3 4

3 4

(21)

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

1 2

4 3

1 2

4 3

1 2

4 3

要求3

3 4

(22)

(証明)

全てのアルゴリズムは、初期状態が違っている。

「初期状態が違う2つのアルゴリズムは、任意の時点に おいて状態が違う」を示せば、補題の証明は完成する。

(それの証明)

初期状態において違うので、第1リクエスト後も違う。

(初期状態において、第1リクエストの来るところには、

必ずサーバがあるから。第1リクエスト後は初期状態 と同じ。)

補題

どの時点においても、アルゴリズムの状態は全て異なる。

(23)

i リクエスト後に状態が違うとしよう。

i+1リクエスト後にも違うということを、これから示す。

例えば、第 i リクエスト後が以下のようになっていたとしよう。

1 2

4 3

1 2

4 3

3 1

アルゴリズムA アルゴリズムB

(1)AもBもサーバのある要求点(例えば上記の2)に来る。

AもBも動かさない。

i+1 回目のリクエスト後も、状態は異なる。

次のリクエストがどこに来るかで場合分けする。

(24)

1 2

4 3

1 2

4 3

3 1

アルゴリズムA アルゴリズムB

(2)AもBもサーバのない要求点に来る。

そんな要求点はない。

(25)

1 2

4 3

1 2

4 3

3 1

アルゴリズムA アルゴリズムB

(3)Aではサーバがないが、Bではサーバのある要求点

(上記の例では1)に来る。

Aは動かして、Bは動かさない。

困るのは、上記の例で、Aが3から1に動かす。

1 2

4 3

1 2

4 3

(26)

アルゴリズムA アルゴリズムB

しかし、それなら、ルールより、第 i リクエストの要求は3だった。

しかし、Bは第 i リクエスト後には要求点3にサーバを置いていない。

矛盾

1 2

4 3

1 2

4 3

3 3

(証明終わり)

(27)

これらk個のアルゴリズムを同時に動かす。

そして、総移動距離を考える。

1 2

4 3

要求: 2 4 1 2 3

1 2

4 3

1 2

4 3

アルゴリズム1 アルゴリズム2 アルゴリズム3

3 1

各ステップにおいて、全てのアルゴリズムの状態が異なるから、

サーバを動かすアルゴリズムは1つだけ。

(28)

k個のアルゴリズムのコストの総和:

d(r1 , r2 )+d(r2 , r3)+d(r3 , r4 )+・・・+d(rn-1 , rn)

アルゴリズムのコスト≧

少なくとも1つは、コストの総和が 以下。OPTは当然それ以下。

したがって、最適解は今考えているアルゴリズムより、

少なくともk倍は良い。

これで、任意のアルゴリズムの競合比がk以上であることが 示せた。

d(r1 , r2 )+d(r2 , r3)+d(r3 , r4 )+・・・+d(rn-1 , rn) 1

k (d(r1, r2)+d(r2, r3)+d(r3, r4 )+・・・+d(rn-1 , rn))

(29)

有名な予想(kサーバ予想)

kサーバ問題の競合比はk。」

現段階で知られていること。

kサーバ問題の競合比は2k-1以下。

kサーバ問題の競合比はk以上。

2サーバ問題の競合比は2。

限られた要求点(火事になる家)の場合、

kサーバ問題の競合比はk

・ライン上

・木上

・要求点がk+1個しかない場合。

・要求点がk+2個しかない場合。

(30)

アルゴリズム Double Coverage (DC)

ルール:左端のサーバより左に要求が来たら

→左端のサーバを動かす

右端のサーバより右に要求が来たら

→右端のサーバを動かす

2つのサーバの間に要求が来たら

→それら2つのサーバを同じ距離だけ動かす

k=4の例

定理:DCの競合比は k 以下である。

(31)

貪欲アルゴリズムの競合比は、ライン上でも無限大

OPT

(32)

同じ入力にDouble Coverageだと

左のサーバがちょっとずつ近づいてくるので、

右のサーバが「無限に振らされる」ということにはならない。

(33)

定理:DCの競合比は k 以下である。

証明に入る前に

解析の基本的な考え方 ならし解析(Amortized Analysis

理想的な状況 1ステップで、

OPTのコストがc → アルゴリズムのコストがkc以下 これが言えれば、競合比がk以下であることは言える。

しかし、この条件は強すぎる。

(34)

例えば

OPT アルゴリズム ---

5 8

2 12

11 6

9 10

2 2

7 10

ステップ1 ステップ2 ・ ・ ・ ステップ6 36 48

実際の比は4/3なのに、解析では6になってしまう。

(つまり、解析で損をしている)

(35)

ならし解析

OPT アルゴリズム ---

5 8

2 12

11 6

9 10

2 2

7 10 ステップ1

ステップ2

・ ステップ6

ならし分 ---

-1 -10 10

2 0 0

ならしコスト ---

7 2 16 12 2 10

ならしコスト=アルゴリズムのコスト+ならし分

もちろん、ならしコストをどう定義するかが難しい!

重要なポイント:

・毎ステップ ならしコスト≦1.5×OPTのコスト

・ならし分の合計≧0

→ アルゴリズムのコストの合計≦ならしコストの合計

≦1.5 ×OPTのコストの合計

(36)

DCの配置

定理:DCの競合比は k 以下である。

(証明)

ある時点において、

OPTの配置

このとき、DCとOPT間のサーバ同士の、左から順に対応させるマッチング の重みをMとする。

(37)

DCの配置

OPTの配置

(見やすいように、上下で対応させているが、実際の「距離」は直線上で測る)

ある時点でのポテンシャル関数(OPTDCの配置のみから決まる値)を TkMΣ とする。

Σ は、DCにおける、2つのサーバ間の距離の総和。 k

2 個の和

(38)

ポテンシャル関数の変化を解析する。

TkMΣ

T0

要求r1

T1, 1

OPTが動かす

T1, 2

DCが動かす

要求r2

T2, 1 T2, 2

OPTが動かす DCが動かす

(i) Ti, 1T(i-1), 2kdi

OPTが動かす番なので、Σ は変化しない。

M は、マッチングは元のままだとしても、OPTがd しか動かないので、

d しか増えない。よって全体で kd しか増えない。

(ポテンシャル関数は、M k が掛かっていることに注意!)

d iはこの要求に対するOPTのコスト

i

i i

要求r3

OPTが動かす

(39)

ポテンシャル関数の変化を解析する。

(ii) Ti, 2Ti, 1 ≦-si si はこの要求に対するDCのコスト つまり、少なくともs iは減る

TkMΣ

T0

要求r1

T1, 1

OPTが動かす

T1, 2

DCが動かす

要求r2

T2, 1 T2, 2

OPTが動かす DCが動かす

要求r3

OPTが動かす

(40)

40

(ii) Ti, 2T i, 1 ≦-si

場合1:端っこに要求が来る

si はこの要求に対するDCのコスト

DCの配置

OPTの配置

OPTはそこに既にサーバがある(OPTが動作した後の状態だから)

si

M s 減る (DCの動かしたサーバは、一番右だった。

OPTは、少なくとも要求点にはサーバがいる。もしくは、それより 右にもいるかもしれない。今動かしたDCのサーバは、

とにかく要求点より右の(OPTの)サーバとマッチしているはず。)

Σ (k-1)s 増加する。(自分以外のk-1個のサーバとの距離 が、それぞれs ずつ増えるから。)

全体としてs 減る。

i

i

i i

(41)

(ii) Ti, 2T i, 1 ≦-si

場合2:間に要求が来る

si はこの要求に対するDCのコスト

DCの配置

OPTの配置

si /2 si /2

(42)

場合2:間に要求が来る

DCの配置

Σ は、動いた2つのサーバ間はs 減る。

それ以外は増えも減りもしない。

(例えば、左にあるサーバだと、1個が s /2 遠のいて、もう一個がs /2 近づく。つまり、それ対他のサーバの距離の総和は変わらない。)

i

i i

si /2 si /2

si はこの要求に対するDCのコスト

(ii) Ti, 2T i, 1 ≦-si

M は、動かした2個のうち、1個に関連して必ずs /2は減る。

もう1個に関連する分は、増えたとしても高々s /2

(つまりM は増えない)

i i

次ページで、もう少し詳しく見る。

(43)

M は、動かした2個のうち、1個に関連して必ずs /2 は減る。

もう1個に関連する分は、増えたとしても高々si /2i OPTの配置

DCの配置

要求点

si /2 si /2

(44)

逆に、両方とも増えるとしたら、こんな感じ。

でも、OPTの方が要求点にサーバがないことになるので矛盾。

OPTの配置

DCの配置 si /2 si /2

(45)

ここまで証明したことのまとめ ポテンシャル: TkMΣ

(i) Ti, 1T(i-1), 2kd i di はこの要求に対するOPTのコスト

(ii) Ti, 2T i, 1 ≦-s i si はこの要求に対するDCのコスト T0

要求r1

T1, 1

OPTが動かす

T1, 2

DCが動かす

要求r2

T2, 1 T2, 2

OPTが動かす DCが動かす

要求r3

OPTが動かす

(i)と(ii)を足すと

Ti, 2T (i-1), 2kdisi s + Ti i, 2T(i-1), 2kdi

(46)

46

s + Ti i, 2T(i-1), 2kdi

iステップ目でのならしコスト iステップ目でのOPTのコストのk

ならしコストの総和 Tn, 2T(n-1), 2 T(n-1, 2)T(n-2), 2

T2, 2T1, 2

・・・

T(n-2, 2)T(n-3), 2

Tn, 2T0 T1, 2T0

Tn, 2T0nによらない定数。

本当は「ならし分の合計≧0

を言わなければならないのだけど、

競合比の定義ではこれでOK.(省略)

よって、競合比kが言えた。

(証明終わり)

(47)

T0 Tn, 2 s1s 2+ ・・・ +s n kd1d 2+ ・・・ +dn)+

アルゴリズムの総コスト

s + Ti i, 2T(i-1), 2kdi を全てのiについて足し合わせると 直接的にやってみると、

OPTの総コスト

参照

関連したドキュメント

512 いたずらニャーオ ナグダ,アン・ホワイトヘッド 福音館書店 513 いたずらまじょ子と3つのおねがい 藤 真知子 作 ポプラ社 514 いたずらまじょ子とあくまのおたんじょう会 藤

ITPASS サーバまとめ  サーバ構築・運用を通して技術や運営のノウハウを 身につけるためのトレーニングキット  北大 EP サーバ, 神戸大

■ 2D グラフと3D グラフ      グラフに3D

■ ■ ■ ■ 4.1 4.1 4.1 4.1 設計 設計の 設計 設計 の の手順 の 手順 手順 手順 設計といっても、どうすればよいのでしょうか。 その方法を考えてみましょう。

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

大きい数と小さい数、対数の導入と計算。近似の考え方。この近似に対

子問題1の解 子問題2の解.

P=NP か P≠NP かは まだ分かっていない。. (多くの人が P≠NP