スライド 1

9章 縮小法
杉原厚吉.(2001).「データ構造とアルゴリズム」.
東京:共立出版.
情報知能学科「アルゴリズムとデータ構造」
担当:白井英俊
9章の目的
• 5章で分割統治法を学んだ
• 分割統治法は、問題を小問題に分解して解く
アルゴリズム設計原理
• 小問題の大きさの合計が元の問題の大きさよ
り小さい場合の分解法を「縮小法」という
• 縮小法は、特に効率的なアルゴリズムとなる
9.1 問題の規模縮小化
• 分割統治法: 大きさ大きさnの問題を、a個の
小問題に分割し、それぞれの小問題の大きさ
がn/bになる場合を考えた
小問題(n/b)
問題全体
…
(サイズn)
a個
小問題(n/b)
小問題(n/b)
縮小法: n >a*(n/b) とな
るように問題を分解
延べサイズ=a * (n/b)
問題の規模縮小化
• より一般に…
大きさnの問題Pが、Pと同じ形式の小問題P1, P2, …, Pk
に分解でき、それぞれの小問題の大きさが
s1*n,s2*n,…, sk*nであり
0 < s1, s2, …, sk < 1、かつ s1+s2+…+sk< 1
(9.1)
問題の大きさがn0 以下の場合は分解しないとする。
計算時間をf(n)とおくと
(9.2) f(n) = c (n ≦ n0 )
f(s1*n)+ f(s1*n)+… f(s1*n)+c*n (n > n0 )
を満たすとき、 f(n) = O(n)
9.2 定順位要素の抽出
問題:n個の実数の集合S={x1, x2, …, xn}と整数
kが与えられた時、Sの中で小さい方から順位
がk番目の要素を抽出する
素直な解き方: Sをソートしてk番目の要素を取
り出す
計算量はO(n logn)
よりよい方法: 縮小法を用いる。
ソートしないので、計算量はO(n)
縮小法による定順位要素の抽出
アルゴリズム Order(S, k)
|S|<100 のとき、Sの要素をソートし、k番目の要素を取り出して処理
を終了
5個ずつのグループの3番目の要素だから、
そのグループの中央値
2. |S| ≧100 のとき(n= |S| とする)
① Sの要素を5個ずつのグループにわけ、各グループの中から順
位3番目のものを取り出し、それらを集めた集合をTとする
② m ← Order(T, n / 10 )
Tの個数はn/5ある
③ Sをmより小さいものの集合S1 、 mと等しいものの集合S2 、mより
大きいものの集合S3 へ分割
mは中央値の中央値
④ k ≦ |S1| なら y←Order(S1, k)
|S1| < k ≦ |S1| +|S2|なら y ←m
|S1| +|S2| < k なら y←Order(S3, k -|S1| - |S2|)
⑤ yを出力して処理を終了
1.
実習
• 縮小法による定順位要素の抽出は、かなり要
素数が大きい集合に対するもの。
• ここでは「感触」をつかんでもらうため、アルゴ
リズムにおける「100を10で置き換え」て、以
下のデータに対し試してみよう。(n=30, k=10)
056, 927, 234, 048, 804, 055, 565, 585, 333, 250,
457, 369, 552, 488, 642, 274, 500, 783, 812, 984,
087, 528, 749, 092, 043, 618, 194, 796, 123, 196
実習(続き)
5個ずつのグループ
30/10=3番目の要素
S= { { 056,
048, 927,
056, 234,
234, 048,
804, 804
927 },
{ 055,
055, 250,
565, 333,
585, 565,
333, 585
250 },
{ 369,
457, 457,
369, 488,
552, 552,
488, 642
642 },
{ 274, 500, 783, 812, 984 },
{ 043,
087, 087,
528, 092,
749, 528,
092, 749
043 },
{ 123,
618, 194, 196,
796, 618,
123, 796
196 } }
3番目の要素
これに続けて試してみよう!
計算量の問題
• 定順位要素の抽出は次のようにしてもO(n)で実行で
きる(?)。この方法と縮小法との計算量を比較せよ。
• 手続き:
入力:n個の数の集合S、出力:小さい方からk番目
最大要素だけが重要なのでヒープを使うと効率的
の要素
1. 最初のk個をソートしておく。それをTとする。
2. (n-k)個の要素それぞれ(xとする)に対し、Tの最大
要素(yとする)と比較。小さい時に限り、T-{y}+{x}
(Tからyを取り除きxを足した集合)をソートする。
3. Tの最大要素が答え。