• ベストアンサー

大滝みや子先生のかんたんアルゴリズム解法第2版

大滝みや子先生のかんたんアルゴリズム解法第2版の、第2部第3章の二分探索の例題について質問です。 例題bに当てはまる mid←(high+low)/2 というのがどうしても理解できません。 mid←high/2 ではいけないのでしょうか。 なぜlowを足しているのでしょうか。 真ん中を出すのならば、要素数であるnが格納されたhighを半分に割ればいいと思うのですが・・・。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

どうしても理解できません,ということなら, 以下の説明の (high+low)/2 を high/2 に置き換えて, 処理の流れをトレースしてみてはいかがでしょう。 -------- 添字が1から始まる配列array[]があり,そのすべての要素に次のように昇順に値が格納済とする。   array[1]←10   array[2]←20   array[3]←30   array[4]←40   array[5]←50   array[6]←60   array[7]←70 探索する値としてx=50を想定し,この値が配列中のどこにあるかを2分探索で探し出す。 ▼1回目の探索 low←1番目,high←7番目,よってmidは (high+low)/2 =4番目 array[4](=40) < x(=50) なので, 次はarray[5]~array[7]の範囲を探索すればよい。 low←mid+1 つまり lowに5を設定して次へ。 ▼2回目の探索 low←5番目,high←7番目,よってmidは (high+low)/2 =6番目 x(=50) < array[6](=60) なので, 次はarray[5]~array[5]の範囲を探索すればよい。 high←mid-1 つまり highに5を設定して次へ。 ▼3回目の探索 low←5番目,high←5番目,よってmidも (high+low)/2 =5番目 x(=50) = array[5](=50) なので, 探索する値を発見。その位置は5番目。

noname#180969
質問者

お礼

jjon-comさんの問題に合わせて当てはめたところ、 すぐに理由がわかりました。 ありがとうございました。

関連するQ&A