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

1 第4章 計算の複雑さ入門

N/A
N/A
Protected

Academic year: 2021

シェア "1 第4章 計算の複雑さ入門"

Copied!
3
0
0

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

全文

(1)

1 第4章 計算の複雑さ入門

第4章 計算の複雑さ入門

4.1. 計算の複雑さの理論概観

「計算可能か?」Î「どの程度の計算コストで計算可能か?」

計算の複雑さの理論(Computational Complexity Theory) (1) 計算量の上限に関する研究

(2) 計算量の下限に関する研究 (3) 計算の難しさについての構造的研究

(1)計算量の上限に関する研究

効率のよいアルゴリズムの設計(アルゴリズム理論)

ある問題Xに対して,それを解くアルゴリズムA があり,

サイズn のどんな問題例に対してもA の時間計算量が

T(n) 以内であるとき,アルゴリズムA の時間計算量の

上限はT(n)

(最悪時の漸近的時間計算量)

1/14

(2) 計算量の下限に関する研究

問題X に対するどんなアルゴリズムも最悪の場合にはT(n)

時間だけ必ずかかってしまうとき,問題Xの時間計算量の 下限はT(n).

・P NP予想

・暗号システムの頑健さ (3) 計算の難しさについての構造的研究

“xx程度の難しさ”がもつ特徴について調べること.

難しさの程度による階層構造.

2/14

4.2. 計算時間の計り方 4.2.1. 標準形プログラム再考 定義4.1. (計算時間の定義)

A: k入力標準形プログラム x1, x2, ..., xk: Aへの入力

Aのwhileループ1回り分の実行をAでの1ステップという.

入力x1, x2, ..., xkに対してAが停止するまでに回るwhileループの

回数をAのx1, x2, ..., xkに対する計算時間(略してA(x1, x2, ..., xk) の計算時間)という.ただし,停止しないとき,計算時間は無限大.

time_A(x1, x2, ..., xk) A(x1, x2, ..., xk)の計算時間

3/14

全体はwhile ループ

各行は

¾1つのif 文+pcへの代入

¾基本命令1つ+pcへの代入

1 2

1

_ ( ) max{ _ ( , ,..., k) : | i| }

i k

time A l time A x x x x l

≤ ≤

=

標準形プログラム progプログラム名(input ...);

var pc: Σ∗; ... ; Σ; ... ; Σ∗;

begin pc:=1;

while pc 0 do case pc of 1: (文);

2: (文);

3: (文);

...

K: (文);

end-case end-while;

halt(Σ型の変数);

end.

- if 比較文 then pc:=k1else pc:=k2end-if -代入文; pc:=k;

4/14

各(文)の形は

のいずれか.

・各文が高々定数時間で実行できるための制約 u, u’: Σ型の変数, v, v’: Σ型の変数

c: Σ型の定数, s: Σ型の定数

(代入文)(1) u := c; (2) u := u’;

(3) u := head(v); (4) u := tail(v);

(5) v := s; (6) v := v’;

(7) v := right(v); (8) v := left(v);

(9) v := u# v; (10) v := v # u;

(比較文)(11) u = c (12) v = s

v = v’の形の比較は禁止されている.

5/14

??

4.2.2. プログラムの時間計算量

プログラムの時間計算量を入力サイズの関数として表現

(入力文字列の長さ)

妥当なコード化:

元の対象のサイズに定数倍の範囲内で忠実なコード化 例4.5: 1進表記と2進表記

「数のサイズはその桁数」との立場では 2進表記は妥当なコード化であるが,

1進表記は冗長なコード化

6/14

(2)

2

定義4.3: 自然数上の関数f, gに対し,

ヨc,d>0, ∀n[f(n)≦c g(n) + d]

となるとき,f はオーダーgであるといい,f =O(g) と記述する.

定理4.1:自然数上の任意の関数f, g, h に対し次の関係が成立。

(1)∀n[f(n) ≦g(n)] Æf = O(g) (2)ヨc > 0, n[f(n)cg(n)] Æf = O(g) (3) [ f = O(g) かつg = O(h)] Æf = O(h)

★定数c, dはnと無関係に定まることが必要.

7/14

4.2.3. 問題の時間計算量

定義4.4.Φ を計算問題とし,tを自然数上の関数とする.

いまΦ を計算するプログラムA と定数c, d >0が存在して,

∀l[time_A(l) ≦ct(l) + d]

ならば,ΦはO(t)時間計算可能,あるいはΦの時間計算量は

O(t)であるという.

注意:ここでは計算問題として,集合の認識問題を想定している.

直観的には「問題Φはt時間以下で計算可能」という意味。

(注1) A の時間計算量はt より低いかもしれない.

(注2) A よりも速くΦを計算するプログラムがあるかもしれない.

8/14

例4.7. 素数判定問題の時間計算量 素数判定問題(PRIME) 入力:自然数n(ただし,2進表記)

質問:n は素数か?

PRIME { : nは素数}≡ ⎡ ⎤n prog Naive(input n);

begin

for each i := 1 < i < n do if n mod i = 0 then reject end-if end-for;

accept end.

log n・log i 時間

2 ~n-1の数で割ってみる

n の長さをl とすると,l はほぼlog nだから,time_Naive=O(l22l) 故に,素数判定問題の時間計算量は(高々)O(l22l)

9/14

) log log ( ) ( Naive

_ n 1 c n i d

time

<i<n + ) ) (log (

! log

logn n dn On n2

c + =

=

余談:

2002年に のアルゴリズム が考案された!!

) (l6 O スターリングの公式:

n

e n n

n

2π

!

定義4.5.

自然数上の関数tに対し,時間計算量がO(t) となる集合

(i.e.,認識問題)の全体をO(t) 時間計算量クラスといい,

そのクラスをTIME(t)と表す.

また,tのような関数を制限時間と呼ぶ.

たとえば,O(l22l) 時間で認識可能な集合を集めたクラスが

TIME(l22l)であり,集合PRIME はその一要素.

PRIME TIME(l 22l)

10/14

今ではPRIME ∈TIME (l6)

l l2

l6 2l l22l

×

×

多項式 指数関数

制限時間t にふさわしい関数の条件

(a) n[ n t(n) ]

(b) n, n2[n1< n2Æt(n1) t(n2)]

(c)与えられた入力x に対し,t(|x|)(t(|x|)の1進表記)を 求める計算がO(t) 時間で可能

(a)の条件:入力を読むだけでn 時間かかってしまうから.

(c)の条件:時間がt(n) になったら計算を打ち切るようにするため

のタイマーが実現できるようにするため.

(1進表記を作って,1桁ずつ短くしていく).

∞ ≤

11/14

自然な制限時間(の定義)

例4.8: 集合D = {<a,b>: aはbで割り切れる}の時間計算量 集合Dを認識するプログラムとして,下のプログラムを考える.

prog D(input x);

begin

a:=get(x, 1); b:=get(x, 2);

% x= <a,b>の形でないときは,この時点でreject if a mod b= 0 then accept else reject end-if

end. O(|a||b|)時間で計算可能

time_D(x) = O(|x|2)

入力がx=<a,b>の形のときはO(|x|2)時間かかるが,そうでない 場合にはmod計算の前にrejectするので,O(|x|)時間で終って しまう.これは自然な制限時間の条件(b) に反するが,

Dの最悪時の効率を議論するには,制限時間としてn2を使い,

time_D(l) = O(l2)と評価しても十分である.

12/14

(3)

3

例4.9. 制限時間n2 が条件(c)を満たすこと 入力列xÎO(|x|2)時間以内で出力0|x|2を出力.

以下に基本的なアイディアを示す(プログラムsq) w1:=x # 0; y:= ε; xは入力変数,yは出力変数 while w1 εdo

w1:=right(w1); w2:=x;

while w2 εdo このループで w2:=right(w2); y:=y # 0; |y| Å|y|+|x|となる end-while

end-while;

入力の長さをlとすると,

内側のwhileループはl回 (1回あたり3ステップ)

外側のwhileループはl+1回 全体で 2+(l+1)(3+3l) = 3l2+ 6l+ 5

time_sq(l) = O(l2)

13/14

定理4.2:関数t1, t2を任意の自然な制限時間とする.このとき,

t1+ t2, t1×t2, t1o t2も自然な制限時間.

定理4.3: すべての制限時間t1, t2に対し,

t1=O( t2) ÆTIME(t1) TIME( t2).

証明:

すべてのLで,L∈TIME(t1) ÆL∈TIME(t2)を示せばよい.

定義より,LをO(t1)で認識するプログラムAが存在.

つまり,time_A = O(t1).

t1=O(t2)だから,

time_A = O(t2).

よって,Lの時間計算量はO(t2).

すなわち,L∈TIME(t2) . 証明終 14/14

参照

関連したドキュメント

未記入の極数は現在計画中の製品です。 極数展開のご質問は、

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

奥付の記載が西暦の場合にも、一貫性を考えて、 []付きで元号を付した。また、奥付等の数

奥付の記載が西暦の場合にも、一貫性を考えて、 []付きで元号を付した。また、奥付等の数

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

その 4-① その 4-② その 4-③ その 4-④

理由:ボイラー MCR範囲内の 定格出力超過出 力は技術評価に て問題なしと確 認 済 み で あ る が、複数の火力

られる。デブリ粒子径に係る係数は,ベースケースでは MAAP 推奨範囲( ~ )の うちおよそ中間となる