markdown
二分探索md 9dcb972
lecture/information/algorithm/search/binary-search.lecture.n.md
Download PDF

二分探索にぶんたんさく

date2026-07-14document_iddoc_0eab994965f14f286340001af35899a7description昇順に整列された配列に対する二分探索を、半開区間の不変条件、停止性、計算量から厳密に説明する。type講義statusactiverelateddata/lecture/information/algorithm/search/linear-search.lecture.n.md
algorithmsearchlecture
data/lecture/information/algorithm/search/linear-search.lecture.n.md

1導入どうにゅう

この講義こうぎでは、昇順しょうじゅんに整列せいれつされた配列はいれつに対たいする二分探索にぶんたんさくを、探索区間たんさくくかんの不変条件ふへんじょうけんから説明せつめいする。線形探索せんけいたんさくは各要素かくようそを順次比較じゅんじひかくするが、二分探索にぶんたんさくは整列順序せいれつじゅんじょを利用りようして、一回いっかいの比較ひかくで候補区間こうほくかんの一方いっぽうを除外じょがいする。

2問題設定もんだいせってい

n≥0 要素ようその配列はいれつ A=(A0,A1,…,An-1) が

A0≤A1≤⋯≤An-1

を満みたす、すなわち昇順しょうじゅんに整列せいれつされているとする。目標値もくひょうち x に対たいして、Ai=x を満みたす添字そえじ i が存在そんざいすればその一ひとつを返かえし、存在そんざいしなければ不在ふざいを返かえす。

重複要素ちょうふくようそを許容きょようするため、x が複数ふくすうの位置いちに存在そんざいする場合ばあい、この算法さんぽうはそのうちいずれか一ひとつの添字そえじを返かえす。最初さいしょまたは最後さいごの出現位置しゅつげんいちを求もとめる仕様しようではない。

3半開区間はんかいくかんと中央ちゅうおう

候補こうほとなる添字そえじを半開区間はんかいくかん [l,r) で表あらわす。この区間くかんは l を含ふくみ、r を含ふくまず、区間長くかんちょうは r-l である。l<r のとき、中央添字ちゅうおうそえじを

m=⌊l+r2⌋

とする。このとき l≤m<r が成立せいりつするため、Am は現在げんざいの候補区間内こうほくかんないに存在そんざいする。

4不変条件ふへんじょうけん

反復はんぷくの開始時点かいしじてんで、次つぎの条件じょうけんを維持いじする。

x が配列はいれつに存在そんざいするなら、Ai=x を満みたす添字そえじが [l,r) に存在そんざいする。

4.1初期化しょきか

初期値しょきちを l=0、r=n とする。候補区間こうほくかん [0,n) は配列全体はいれつぜんたいを含ふくむため、不変条件ふへんじょうけんが成立せいりつする。

4.2保存ほぞん

l<r のもとで中央ちゅうおう m を計算けいさんし、Am と x を比較ひかくする。

  • Am=x なら、m を返かえして終了しゅうりょうする。
  • x<Am なら、昇順性しょうじゅんせいにより、すべての i∈[m,r) について Ai≥Am>x である。したがって [m,r) に一致位置いっちいちはなく、r=m と更新こうしんできる。
  • Am<x なら、昇順性しょうじゅんせいにより、すべての i∈[l,m+1) について Ai≤Am<x である。したがって [l,m+1) に一致位置いっちいちはなく、l=m+1 と更新こうしんできる。

いずれの更新こうしんでも、一致位置いっちいちとなり得うる添字そえじだけが新あらたな候補区間こうほくかんに残のこるため、不変条件ふへんじょうけんは保存ほぞんされる。

4.3終了しゅうりょう

l=r では候補区間こうほくかんが空くうである。不変条件ふへんじょうけんにより、x が存在そんざいするなら一致位置いっちいちがこの空区間くうくかんに存在そんざいするはずであり、これは不可能ふかのうである。したがって x は配列はいれつに存在そんざいせず、不在ふざいを返かえしてよい。

5停止性ていしせい

更新前こうしんまえの区間長くかんちょうを L=r-l>0 とする。r=m の場合ばあいの新あらたな長ながさは m-l、l=m+1 の場合ばあいは r-m-1 である。l≤m<r から、いずれも 0≤L′<L を満みたす。

したがって、非負整数ひふせいすうである区間長くかんちょうは一致いっちによって終了しゅうりょうしない各反復かくはんぷくで厳密げんみつに減少げんしょうする。このため反復はんぷくは有限回ゆうげんかいで終了しゅうりょうする。

6計算量けいさんりょう

一回いっかいの更新後こうしんごの区間長くかんちょう L′ は

L′≤⌊L2⌋

を満みたす。n=0 なら反復はんぷくは行おこなわれない。n≥1 では、k 回かいの更新後こうしんごに区間長くかんちょうが高々たかだか ⌊n/2k⌋ となる。2k>n を満みたせば区間くかんは空くうになるため、反復回数はんぷくかいすうは高々たかだか ⌊log2n⌋+1 回かいである。よって時間計算量じかんけいさんりょうは O(log(n+1))、追加領域ついかりょういきは O(1) である。

7算法さんぽうの要約ようやく

  1. [l,r)=[0,n) とする。
  2. l<r の間あいだ、m=⌊(l+r)/2⌋ を計算けいさんする。
  3. Am=x なら m を返かえす。x<Am なら r=m、Am<x なら l=m+1 とする。
  4. l=r なら不在ふざいを返かえす。

二分探索にぶんたんさくの正当性せいとうせいは、昇順性しょうじゅんせいによる候補こうほの除外じょがい、不変条件ふへんじょうけんの保存ほぞん、および区間長くかんちょうの厳密減少げんみつげんしょうから導みちびかれる。

raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
copy encoded share link
path をコピー
copy share link
copy encoded share link
copy share link
copy encoded share link
タブを全て閉じる