アプリ版:「スタンプのみでお礼する」機能のリリースについて

相異なるn個のデータが昇順に整列された表がある。この表を1ブロックm個に分割し、各ブロックの最後尾のデータだけ線形探索することによって、目的のデータの存在するブロックを探し出す。次に当該ブロック内を線形探索して目的のデータを探し出す。このときの平均探索回数はどれか。ここで、 m<nとし、目的のデータは必ず表の中に存在するものとする。

答えは m/2 + n/2m なのですが、

目的のデータが存在したブロックの中での
線形検索の結果でm/2 となるのは分かるのですが、

なぜ、n/2mで目的のブロックを見つけることが
できるのかが分かりません。

例えば、
(1,8,9),(10,13,14),(17,19,20) で
3つずつのブロックに分けて各ブロックの最後尾
の数だけで線形検索を行うってことは、

9,14,20 で 検索するってことで 平均2/3
で見つかることは分かります。

けれど、目的の数値が9,14,20 以外の数字
だったら、目的の数値が
含まれるブロックが見つからない気がするのですが。

例えば目的の数値が、8だったら、
最後尾の数だけで、線形検索しても
該当の数がないので、分からないと思うのです。

どなたか、お馬鹿な私に分かりやすく教えてください。
よろしくお願いします。

A 回答 (3件)

この探索法は,たぶん,索引順編成ファイルにおける探索法(の原理)のことを言っているのだと思います。

それはともかく,

この例では,全部でn個のデータを1ブロックm個のデータに分割しますので,ブロック数は(n/m)個です。
で,このような問題で「(平均)探索回数」というのは,「(平均)比較回数」と考えたほうが分かりやすいのではないかと思います。
探索しているデータの含まれるブロックを見つけ出すまでの,ブロック探索の回数は最大で(n/m)回(最小は0回?)なので,平均すると(1/2)×(n/m)回となります。

>目的のデータが存在したブロックの中での
線形検索の結果でm/2 となるのは分かるのですが、

というわけですから,合計の平均探索回数は,
>答えは m/2 + n/2m なのですが、
となります。
これが1個のデータを探索するときの平均線形探索回数(=目的のデータが含まれるブロックを見つけ出し,さらにブロック内で目的データを見つけ出す までの合計探索回数 の平均値)です。

次の疑問点についてですが,
>例えば目的の数値が、8だったら、
最後尾の数だけで、線形検索しても
該当の数がないので、分からないと思うのです。

線形検索をするときに,たとえばSEAMOONさんのデータ例で,「17」を探しているとすれば,
「17以上」と言う条件で探索します。
そうすると,ブロック探索では,「9」と「14」は適さず「20」が条件に適うものとして第3ブロックが探索結果となります。(実探索(比較)回数=3)

>9,14,20 で 検索するってことで 平均2/3
で見つかることは分かります。
違います。平均は(1/2)×(9/3)=3/2回 となります。(個人的意見としては,(1+3)/2=2が平均回数だと思うのですが)

次に第3ブロック内で同様に「17以上」(今度は「17と等しい」でもいいですが)という条件でブロック内線形探索をすると1回の探索(実回数1回の比較)で目的のデータにたどり着くことになります。
    • good
    • 0

いくつか解説ページがありましたのでURLを貼っておきます。



http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/h12a …


http://mt-net.vis.ne.jp/ADFE_mail/0140.htm
    • good
    • 0
この回答へのお礼

ありがとうございます。
読んでみてもいまいち、理解できません。

なぜ、m/2+n/2mなのでしょう。

m/2 × n/2m なら意味が分かる気が
するのですが。

ん、平均回数を求めるからなのかなぁ。
全回数を求める時はどうなるんだろう

お礼日時:2004/03/03 09:46

まず、1つ誤解。



>最後尾の数だけで、線形検索しても
>該当の数がないので、分からないと思うのです。

昇順に整列されているので、検索対象の数値が最後尾の数値以下なら、そこのブロックに含まれることが分かります。

m/2 + n/2m の n/2m は、n/m ÷ 1/2 かな、と。
つまり、データ数÷ブロック数の半分。

この回答への補足

>検索対象の数値が最後尾の数値以下なら、

この部分は計算式には表れてこないのでしょうか?

仮に昇順に並んでいないとしたら、
その場合計算式はどうなるのでしょう。

混乱中

補足日時:2004/03/03 09:41
    • good
    • 0
この回答へのお礼

ふむふむ、ありがとうございます。

お礼日時:2004/03/03 08:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています