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

アルゴリズム入門(3)

N/A
N/A
Protected

Academic year: 2021

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

Copied!
17
0
0

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

全文

(1)

宮崎修一

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

アルゴリズム入門( 3 )

(分割統治法)

(2)

分割統治法とは

分割

解く 解く

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

元の問題の解 統治

(3)

3

ソーティング

ソーティング(並べ替え)

入力:

n

個の正の整数

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

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

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

(4)

4

ソーティングに対するアルゴリズムの例:

アルゴリズム1

n

個の数を並べる全ての組み合わせに対して、

それが小さい順に並んでいたら出力。

動作例:

入力 5,1,4,3,2,6 5,1,4,3,2,6

× 5,1,4,3,6,2

× 5,1,4,2,3,6

× 5,1,4,2,6,3

× 5,1,4,6,2,3

×

1,2,3,4,5,6

入力が

n

個のとき、

チェックすべき組み合わせは

n!

通りある。

(5)

5

アルゴリズム2

n

個の中から一番小さい数を選び、先頭へ。

n-1

個の中から一番小さい数を選び、先頭へ。

n-2

個の中から一番小さい数を選び、先頭へ。 2個の中から一番小さい数を選び、先頭へ。

動作例:

入力 5,1,4,3,2,6 1,5,4,3,2,6 1,2,5,4,3,6

1,2,3,5,4,6

入力が

n

個のとき、

1回の走査で

n

個以下チェック 走査は

n

回やれば十分

全体で

n 2

回以下

(6)

n

より高速なアルゴリズムはあるだろうか?

クイックソート

2

9, 30, 6, 15, 21, 10, 13, 4, 12, 8

適当に1個選ぶ(基準値)

9, 6, 4, 8

基準値より小

30, 15, 21, 13, 12

基準値より大

4, 6, 8, 9

何らかの方法でソートする

12, 13, 15, 21, 30 10

ソート済み

この部分をどうするか?

(7)

7

同じようにやる(再帰)

9, 6, 4, 8

適当に1個選ぶ(基準値)

基準値より小

4 9, 8

基準値より大

4

1個なので何もしない

8, 9

2個なので直接比較して 必要ならば並べ替える

6

ソート済み

(8)

右の方

30, 15, 21, 13, 12

適当に1個選ぶ(基準値)

基準値より小

12 30, 15, 21

基準値より大

12

1個なので何もしない

15, 21, 30

ここは3個なので、また再帰

13

ソート済み

(9)

9

計算時間

(毎回半分ずつにデータが分かれたと仮定して)

n

n/2

n/2

n/4

n/4

n/4

n/4

… …

1個や2個になったら、これ以上分解しない

n

回の走査

n

回の走査

n

回の走査

各段において、

n

回の走査 何段あるか?

(10)

n

log n

2

(11)

11

計算時間

1

段で、約

n

回のスキャン

・段数は

log n

全体で

O (n log n)

時間

ところが。。。ある(都合の良い)仮定を置いていた。

「毎回データが半分になる。」

問題:そうならなかった場合、最悪の場合は、計算時間は どうなるだろうか?

2 16 1024 1048576

1 4 10 20

n log n 2

アルゴリズム2の

n 2

から改善

(12)

ただし、基準値を一様ランダムに選ぶ場合には、

計算時間の期待値≒

1.39 n log n

であることが証明されている。

つまり、クイックソートは 最悪計算量:

O(n )

平均計算量:

O(n log n)

2

O( n log n)

より速いアルゴリズムが存在しないことも

証明されている。

最悪計算量が

O( n log n)

のソーティングアルゴリズムもある

・ マージソート(これも分割統治法の一種)

・ ヒープソート

(13)

13

マージソート

9, 30, 6, 15, 21, 10, 13, 4, 12, 8

9, 30, 6, 15, 21 10, 13, 4, 12, 8

6, 9, 15, 21, 30

何らかの方法でソートする

4, 8, 10, 12, 13

基準値を考えず、単に二等分する

4, 6, 8, 9, 10, 12, 13, 15, 21, 30

ソートされた

2

つの列を

1

つにする

この部分をどうするか?

(14)

ソートされた

2

つの列を

1

つにする

4 8 10 12 13 6 9 15 21 30

常に列の先頭だけを見る

列の長さに比例した時間

O(n)

で出来る

データが毎回半分ずつになっているので、

全体の計算量は

O(n log n)

となる。

(15)

15

クイックソートは、分割するときに工夫しているので、統治のとき にはあまり手間がかからない。

逆に、マージソートは分割するときに手間をかけず、統治のとき 工夫している。

(16)

16

再帰の考え方

自分を記述するために、自分自身を使う 例えばさきほどの、クイックソートの例

QuickSort(I) :

入力列

I

をソートする

QuickSort(I)

I

3

個以上の要素からなる場合

{I

の中から、要素を

1

つ適当に選び、それを

x

とする。

I

の中で、

x

より小さな値からなる入力列を

A

とする。

I

の中で、

x

より大きな値からなる入力列を

B

とする。

QuickSort(A)

を実行し、その結果を

A

´とする。

QuickSort(B)

を実行し、その結果を

B

´とする。

A

´

x B

´ を出力する。

}

I

2

個以下の要素からなる場合

{

大小比較して並べ替えて出力する。

}

QuickSort

というアルゴリズムを記述するために

QuickSort

を使っている

(17)

17

その他の再帰の例 階乗の定義

再帰を使わない定義

n! = n(n-1)(n-2) … 2 1

再帰を使った定義

n! = n

(n-1)! (n ≧ 2

の場合)

= 1

n =1

の場合)

5! = 5

4!

= 5

4

3!

= 5

4

3

2!

= 5

4

3

2

1!

= 5

4

3

2

1

ハノイの塔

参照

関連したドキュメント

ポートフォリオ最適化問題の改良代理制約法による対話型解法 仲川 勇二 関西大学 * 伊佐田 百合子 関西学院大学 井垣 伸子

基本的金融サービスへのアクセスに問題が生じている状態を、英語では financial exclusion 、その解消を financial

養子縁組 子どもの奪取・面会交流 親族・ルーツ捜し 出生登録、国籍取得、帰化申請など 医療/精神保健問題 結婚/離婚問題、手続きなど

 ファミリーホームとは家庭に問題がある子ど

進展メカニズム の理解に重要な (優先順位が高い)

難病対策は、特定疾患の問題、小児慢性 特定疾患の問題、介護の問題、就労の問題

年度 開催回 開催日時 テーマ. もえつきを防ぐ問題解決の思考法