AOBA's Information Processing Education
1997/09/21
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
「平成3年 第1種 午前 問8」 問8 表探索に関する次の記述中の( )に入れるべき適切な字句を、解答群の中から選べ。解答は重複して選んでもよい。
10,000個の相異なる要素が、キーの昇順に整列された表がある。この表を外部から入力されたデータのキーをもとに探索して、該当するキーの要素を取り出す方法を考える。ただし、入力キーは一様分布しているものとする。また、入力キーの値が表中にないこともある。
この表を探索する方法として次の(1),(2)の方法を考える。
(1)この表を先頭から順次比較して、該当キーを見付け出す。
(2)この表を1ブロックX個で、10,000/X個(小数点以下切上げ)のブロックに分割し、目的キーがどのブロックにあるかを、先頭ブロックから順に、各ブロックの最後尾のキー(各ブロックの中で最も大きなキー)だけ逐次探索し、該当ブロックを見付ける。次に該当ブロック内を逐次探索して、該当キーを見付ける。
(1)の逐次探索の場合、平均比較回数は、約( a )回であり、最大比較回数は、( b )回である。
(2)の場合、Xの値によって、平均比較回数は変化する。すなわち、全要素をNとすると、平均探索回数は、式( c )で表せる。
Nが10,000のとき、式( c )が最小となるXは、( d )であるから、平均探索回数は、( e )回である。
a,bに関する解答群
ア 1,000 イ 2,000 ウ 3,333 エ 5,000 オ 10,000
cに関する解答群
ア N/X イ N/(2X) ウ X+(N/X) エ (X/2)+(N/(2X)) オ X2+(N/X2) d,eに関する解答群
ア 8 イ 9 ウ 12 エ 13 オ 14 カ 15 キ 50 ク 100 ケ 150 コ 200
解説 情報処理に関する知識は必要ない問題です。ただし、設問dを解答するには少しだけ数学の知識が必要でした。ここが分かれば全問正解でしょう。
(1)の方法は単純に先頭からひとつづつキーを比較する方法です。対して(2)の方法は要素をブロックに分割し、まず求める要素がどのブロックにあるかを見付け、次にブロック内を(1)と同じ方法で探索します。
つまり(2)の方法は、ブロックの代表値(この問題ではブロックの最後尾のキー)の比較とブロック内の要素の比較、と2段階で探索を行います。a,bについて
最小比較回数は1回、最大比較回数は10,000回。
平均比較回数=(最小比較回数+最大比較回数)/2=(1+10000)/2≒5,000回
これについては解説はいらないでしょう。
cについて
まず、求める要素がどのブロックにあるかを見付けるための探索(比較)回数を考えます。
全要素数がN個、1ブロックの要素数がX個ならば、ブロックの数はN/X個です。
求める要素がどのブロックにあるかを見付けるための平均探索回数は、ブロック数の約半分ですので、N/(2X)となります。次に、ブロック内の探索回数を考えます。
1ブロックがX個ならば、ブロック内の平均探索回数はこの値の約半分ですので、X/2です。したがって、(2)の場合の平均探索回数はこれらの値を加算して、
(X/2)+(N/(2X)) です。
dについて
これがちょっとやっかいでしたね。高校1年(2年だったかな?)の時の数学の授業を思い出しましょう。
ここではくどくど解説せずに、結論だけ言います。関数f(X)の値を最小にするXは、f(X)をXで微分した式を0とおくことで求めることができます。これを本設問に適用します。つまり、
f(X)=(X/2)+(N/(2X))
=(1/2)*X1+(N/2)*X-1 をXで微分するのです。f’(X)=(1/2)−(N/2)*X-2=0
上記式のNに10000を代入して変形します。
X2=10000 したがって、X=100(負はありえないので除外)
eについて
設問cの解答、(X/2)+(N/(2X))に、N=10000,X=100(設問dの解答)を代入することで求めることができます。
(X/2)+(N/(2X))=(100/2)+(10000/(2*100))=100
と、こんなところでしょうか。
解答
a−エ b−オ c−エ d−ク e−ク