• ベストアンサー

情報処理の問題で、これがよく分からない

相異なる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だったら、 最後尾の数だけで、線形検索しても 該当の数がないので、分からないと思うのです。 どなたか、お馬鹿な私に分かりやすく教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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回の比較)で目的のデータにたどり着くことになります。

その他の回答 (2)

回答No.2

いくつか解説ページがありましたのでURLを貼っておきます。 http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/h12am/h12am_14.htm http://mt-net.vis.ne.jp/ADFE_mail/0140.htm

SEAMOON
質問者

お礼

ありがとうございます。 読んでみてもいまいち、理解できません。 なぜ、m/2+n/2mなのでしょう。 m/2 × n/2m なら意味が分かる気が するのですが。 ん、平均回数を求めるからなのかなぁ。 全回数を求める時はどうなるんだろう

  • nori_6576
  • ベストアンサー率28% (6/21)
回答No.1

まず、1つ誤解。 >最後尾の数だけで、線形検索しても >該当の数がないので、分からないと思うのです。 昇順に整列されているので、検索対象の数値が最後尾の数値以下なら、そこのブロックに含まれることが分かります。 m/2 + n/2m の n/2m は、n/m ÷ 1/2 かな、と。 つまり、データ数÷ブロック数の半分。

SEAMOON
質問者

お礼

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

SEAMOON
質問者

補足

>検索対象の数値が最後尾の数値以下なら、 この部分は計算式には表れてこないのでしょうか? 仮に昇順に並んでいないとしたら、 その場合計算式はどうなるのでしょう。 混乱中

関連するQ&A

  • アルゴリズムに関する問題

    こんばんわ、いくつかの問題につまってしまったので解答と簡単な解説をお願いします; 【問1】 4桁の数字( a1a2a3a4 )をハッシュ法を用いて配列に格納したい。 ハッシュ関数をmod( a1 +a2 +a3 +a4 ,5 )とし、求めたハッシュ関数値に対応する位置の配列要素に格納する場合、9576は(ア)~(オ)のどこに入るか。 ここでmod(x,5)の値は、xを5で割った余りとする。 位置  配列 0  (ア) 1  (イ) 2  (ウ) 3  (エ) 4  (オ) 【問2】 相違なるn個のデータが昇順に整列された表がある。この表を1ブロックm個に分割し、各ブロックの最後尾のデータだけ線形検索することによって、目的のデータを探し出す。 次に当該ブロック内を線形検索して目的のデータを探し出す。 このときの平均探索(比較)回数は(ア)~(エ)のうちどれか。 ここでm<nとし、目的のデータは必ず表の中に存在するものとする。 (ア)  (イ)  (ウ)  (エ)  n    n          n    m n  ─    ─    m + ─   ─+─  m    2m         m    2 2m 【問3】 次の手順はシェルソートによる整列を示している。 データ列”7,2,8,3,1,9,4,5,6”を手順(1)~(4)に従って整列すると手順(3)を何回繰り返して完了するか。 ここで、〔〕は小数点以下を切り捨てる。 <手順> (1)〔データ数÷3〕→Hとする。 (2)データ列を互いにH要素分だけ離れた要素の集まりからなる部分列とし、それぞれの部分列を挿入方を用いて整列する。 (3)〔H÷3〕→Hとする (4)Hが0であればデータ列の整列は完了し、0でなければ(2)に戻る。 以上になります。

  • 基本情報技術者での質問です。

    問題 500個の要素をもつ配列を線形探索するとき、探索キーと配列中の要素との平均比較回数をAとする。 また、昇順に整列された500個の要素をもつ配列を2分探索するとき、探索キーと配列中の要素との平均比較回数をBとする。 このとき、AはBの約何倍か。ここで、探索キーと一致する要素が、配列中に必ず存在するものとする。 答えは31倍なんですが。 自分の解釈としては、まず線形探索の最大比較回数=n この場合だと500です。 この場合2分探索の最大比較回数=(log2N+1回) を割れば何倍かがでてくるであっていますか?? それとバカな質問ですいません高校のときにlogをならっておらず いまさら数学の先生がいなく理解にくるしんでいます。 (logとこの自分が考えてる解き方であっているか)回答おねがいします。

  • 基本情報技術者での質問です。

    問題 500個の要素をもつ配列を線形探索するとき、探索キーと配列中の要素との平均比較回数をAとする。 また、昇順に整列された500個の要素をもつ配列を2分探索するとき、探索キーと配列中の要素との平均比較回数をBとする。 このとき、AはBの約何倍か。ここで、探索キーと一致する要素が、配列中に必ず存在するものとする。 答えは31倍なんですが。 自分の解釈としては、まず線形探索の最大比較回数=n この場合だと500です。 この場合2分探索の最大比較回数=(log2N+1回) を割れば何倍かがでてくるであっていますか?? それとバカな質問ですいません高校のときにlogをならっておらず いまさら数学の先生がいなく理解にくるしんでいます。 (logとこの自分が考えてる解き方であっているか)回答おねがいします

  • 探索・整列アルゴリズムのメリット・デメリットについ

    「コンピューターはなぜ動くのか?」の第5章の「アルゴリズムと仲良くなる7つのポイント」のところにて、主な定番アルゴリズムとして、 表5.1 主な定番アルゴリズム (1)ユーグリットの互除去 (2)エラトステネスのふるい (3)線型探索 (4)2分探索 (5)ハッシュ法 (6)バブル・ソート (7)クイック・ソート 上記のアルゴリズムがあり、そのアルゴリズムの用途には (1)最大公約数のアルゴリズム (2)素数のアルゴリズム (3)データ探索のアルゴリズム (4)整列のアルゴリズム 上記のアルゴリズムがありますが、(3)~(4)のアルゴリズムの用途においてのメリット・デメリット ・データ探索のアルゴリズム (3)線型探索 (4)2分探索 (5)ハッシュ法 についてのメリット・デメリット ・整列のアルゴリズム (6)バブル・ソート (7)クイック・ソート についてのメリット・デメリット これらを教えて頂けばと思っております。 よろしくお願いたします。

  • 情報処理の問題

    情報処理のレポート課題で出た問題なんですが、わからない問題(おそらく基本中の基本)があるので、ぜひ教えてください。   1.2の補数を使って、2進数の01001100-0111100の計算を行いなさい。   これの答えは16でよいのでしょうか? 2.下記の使用のディスク装がある。下記の問いに答えよ。   平均シーク時間(ミリ秒)     18   回転数/分           3000   有効記憶容量(バイト/トラック) 20000   トラック数/シリンダ      20   シリンダ数/ディスク      600   ディスク数/装置        1   (1)最大記憶容量は何メガバイトか   (2)データ転送速度は何キロバイト/ミリ秒か   (3)1ブロック4800バイトのデータが格納されている場合、このデータ1件当たり   の平均アクセス時間(ミリ秒)は? 3.誤り制御とは の三題です。 できれば解答を教えてもらいたいのですが、ヒントだけでもいただけると幸いです。よろしくお願いします。

  • アルゴリズムを勉強していたのですが、線形探索をする

    アルゴリズムを勉強していたのですが、線形探索をする時にデータ件数がNの時平均比較回数が(N+1)÷2回となっていたのですが、なぜ+1をしているのでしょうか?普通にN÷2ではダメなんでしょうか 解説お願いします

  • この二つの問題とける人いませんか?(基本情報処理試験)

    ○毎分 6,000 回転,平均位置決め時間 20 ミリ秒で,1トラック当たりの記憶容量 20 k バイトの磁気ディスク装置がある。1ブロック4 k バイトのデータを1ブロック転送するのに要する平均アクセス時間は何ミリ秒か。ここで,磁気ディスクコントローラのオーバヘッドは無視できるものとし,1 k バイト = 1,000 バイトとする。 A=27 シーク時間、平均回転待ち時間は分かりました。データ転送時間を求めるときに、 20kバイト×100(回転/秒)=2000(kバイト/秒) 4kバイト/2000×1000=2ミリ秒 とする計算の意味が分からないです。もっと分かりやすい考え方があったら、そちらの考え方でも良いので教えてください。 ○ 表の仕様の磁気ディスク装置に,1レコードが 500 バイトのレコード 50 万件を順編成で記録したい。 50 レコードを1ブロックとして記録するときに必要なシリンダ数は幾つか。ここで,一つのブロックは複数のセクタにまたがってもよいが,最後のセクタで余った部分は利用できない。 ・トラック/シリンダ=20 ・セクタ数/トラック=25 ・バイト数/セクタ=512 A=980 こちらは、回答を見ても考え方から分からないです。 よろしくお願いします。

  • 探索プログラムの速さの計算方法を教えてください。

    以下が問題です。 「長さがNの系列に対して3nμ秒で探索を完了する線形プログラムと 4log_2(n)μ秒で探索を完了する二分探索プログラムと 2nlog_2(n)μ秒で整列を完了するプログラムがある。 これらのプログラムを利用して、長さが1024の未整列のデータ系列Sに対し、ある要素が含まれているかどうか探索したい。このとき以下の問いに答えよ。ここでの検索要求とは「系列Sにある要素Xが含まれているかどうか判定すること」とする。」 ・検索要求が1回、5回、10回の場合それぞれの最も速い探索方法とその時間を述べよ。 計算方法と答えを教えてください。

  • 均一ハッシュ法と線形走査法

    均一ハッシュ法と線形走査法それぞれについて 探索成功の場合、表を調べる回数を平均3回未満に おさえるためにはそれぞれの方法の場合、 データ数nに対して表の大きさをどれくらいにとる 必要があるのでしょうか? よくわかりません。どうやって計算したら良いでしょうか?

  • 二分探索の平均探索回数

    こんにちは、 二分探索の最大探索回数がlog2N+1なのは 書籍にある計算式の変換で理解できたのですが、平均探索回数がlog2Nなのが理解できません。 書籍では『平均探索回数の場合、N/2個のデータ探索をすればよいと考えます』と書かれていますが どういう意味なのか判りません。 そこで具体的に考えてみました。 例えば8個のデータの中から探す場合、 a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7] とデータが並んでいて、 それぞれの位置に目的の値が入っていた時の探索回数は、 3回、2回、3回、1回、3回、2回、3回、4回 と考えました。 a[1]の場所に目的の数があった場合、 2回目の探索で見つかる、という意味合いです。 最大探索回数はa[7]の時に4回となり、log2N+1になっています。 この考え方でNを増やしていった所、最大探索回数はlog2N+1になりそうです。 そこで上記の場合の平均探索回数の方は、 (3+2+3+1+3+2+3+4)/8 と計算し、2.625と考えました。 この考え方でNを増やしていくと 16コ:3.375 32コ:4.21875 64コ:5.125 128コ:6.0703125 …と、 平均探索回数がlog2Nではなくlog2N-1に近づいていきます。 考え方の間違っている箇所の指摘をお願いします。

専門家に質問してみよう