平成20年秋期 午前問13

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
国木田花丸さん  
(No.1)
解説がよく分からないんですが、
2000→1000→500→250→125→63→32→16→8→4→2→1で11回比較
最後に1を足して12回比較ではないんですね。

問題文に「"該当するキーが必ず表中にあることが分かっているとき"」とあるのですが、
この一文で最後の1回が省略出来たということではないんですか?

最後の1個に絞れた時の値確認って、"比較"には含まれないんですかね...。
なんというか、日本語で躓いている感...。
2018.09.03 09:42
助け人さん 
FE ゴールドマイスター
(No.2)
2000→1000→500→250→125→63→32→16→8→4→2→1で11回比較
ですが、最後の1回は11回目で、12回目はありません。

もう少し具体的に書いてみます。仮に、外部から入力したキー(探索したいキー)が、先頭(1個目)にあるとします。

①1000個目と比較
②500個目と比較


⑨4個目と比較
⑩2個目と比較
⑪1個目と比較
2018.09.03 11:46
ろっぺんさん 
(No.3)
横から失礼します。
例えば配列が八個あったとして先頭にデータがあるとすると。
まず  (1+8)/2 で  4を比較。    その次に(1+3)/2で  2を比較    その次に(1+1)/2で1を比較

全部で三つです。    これは  log2 8    と同じ値なので

今回の例も  log2 2000 = 約10なので    答えはイです。  

2018.09.03 15:02
助け人さん 
FE ゴールドマイスター
(No.4)
ろっぺんさん

正解はウですよ。管理人様の解答でも、IPAの解答でもウです。

ろっぺんさんの八つの配列の例では、最大比較回数は4回です。先頭にデータがある場合は3回ですが、最後尾にデータがある場合は4回です。

まず  (1+8)/2 で  4を比較    その次に(5+8)/2で  6を比較    その次に(7+8)/2で7を比較    その次に(8+8)/2で8を比較

全部で4回です。4=[log2 8]+1です。

なお、この問題の解説で、
最大比較回数は[log2 N+1] 回
となっているのは、
最大比較回数は[log2 N]+1 回
の誤りですので、別スレで修正依頼します。
2018.09.03 16:11
なたさん 
(No.5)
横から失礼します。

最大比較回数は[log2 N]+1 回
と書くと感覚的に非常にわかりにくいので、
最大比較回数>[log2 N]を満たす最小の整数
と書くほうが理解しやすいかと思います。
2018.09.04 10:28
国木田花丸さん  
(No.6)
皆様、ご丁寧に解説ありがとうございました。理解出来ました。

数学が弱く、[log2 N]+1の意味すら怪しかったのですが、要するに

33~64、65~128、129~256(例)の最大比較回数が同じという解釈で大丈夫ですよね?
2018.09.05 14:01
助け人さん 
FE ゴールドマイスター
(No.7)
33~64、65~128、129~256
ではなく
32~63、64~127、128~255
です。

[log2 N]+1は、それぞれ6、7、8です。
2018.09.05 18:34
国木田花丸さん  
(No.8)
ご指摘があったので(あれ~~っ)と思い、4と7の最大比較回数を考えました。

どちらも最大で3回比較するんですね・・・

3→2を比較→1を比較  最大2回
4→3を比較→2を比較→1を比較  最大3回
7→4を比較→2を比較→1を比較  最大3回
8→5を比較→3を比較→2を比較→1を比較  最大4回

図で言うと、  ○○○/○○○→○○/○・・・→○/○・・・・  こういう、配列を分割する考え方をしていたのがややこしかったようです。

○○①○○○→×××○②○→×××③××  こんな感じで、真ん中に近い配列を1個ずつ調べる  という捉え方をしたらすんなり頭に入ってきました。

解説・ご指摘ありがとうございました!
2018.09.06 11:06
助け人さん 
FE ゴールドマイスター
(No.9)
(No.8)の内容がちょっと気になったので、念のためです。
ただし、中央値を何番目とするかは、(左端+右端)/2(小数以下切捨て)の前提です。

4個の場合
  先頭にデータがある場合・・・2を比較→1を比較  2回
  最後尾にデータがある場合・・・2を比較→3を比較→4を比較  3回

8個の場合
  先頭にデータがある場合・・・4を比較→2を比較→1を比較  3回
  最後尾にデータがある場合・・・4を比較→6を比較→7を比較→8を比較  4回
2018.09.08 14:13

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop