markdown
線形探索
lecture/information/algorithm/search/線形探索-講義.n.md

線形探索せんけいたんさく

date2026-03-27description線形探索を、候補を 1 個ずつしか消せない探索として捉え、探索方針・不変条件・計算量まで順に説明します。type講義statusactiverelateddata/lecture/information/algorithm/search/二分探索-講義.n.md
algorithmsearchlecture

導入どうにゅう

線形探索せんけいたんさく最重要さいじゅうようなのは、配列はいれつ特別とくべつ構造こうぞうがないなら、候補こうほを 1 つずつしていくしかない見抜みぬくことです。

整列せいれつ索引さくいんもない探索たんさくでは、「どこかをまとめててる」根拠こんきょがありません。だからひだりからじゅんて、調しらわった要素ようそ候補こうほからはずしていく、という方針ほうしんになります。この講義こうぎでは、その発想はっそうをはっきり言語化げんごかします。

用語ようご定義ていぎ

まず主役しゅやくになる用語ようごをそろえます。

線形探索せんけいたんさくLinear search とは、先頭せんとうから順番じゅんばん要素ようそ比較ひかくして目標値もくひょうちさが方法ほうほうです。

配列はいれつArrayA=(A0,A1,[PARSE ERROR: Undefined("Command(\"dots\")")],An-1) とします。ここで n要素数ようそすうです。

目標値もくひょうちTargetx とします。やりたいことは、Ai=x となる添字そえじ iつけることです。

比較回数ひかくかいすうNumber of comparisons とは、Ai=x のような判定はんてい何回なんかいしたかをあらわりょうです。

方針ほうしん

配列はいれつ順序じゅんじょ情報じょうほうがないなら、1 かい比較ひかくかるのは「いまている 1 要素ようそx かどうか」だけです。ここが出発点しゅっぱつてんです。

したがって、探索たんさく核心かくしんは「ひだりからじゅん調しらべ、一致いっちしなかった要素ようそ候補こうほからはずす」とかんがえることです。

この見方みかたをはっきりさせるために、各段階かくだんかいで「まだていない区間くかんだけが候補こうほである」という不変条件ふへんじょうけんいます。

導出どうしゅつ

1. なぜ 1 ずつるのか

最初さいしょは、配列はいれつのどの位置いちx があるかかりません。しかも整列せいれつしていないので、たとえば A5>x だったとしても、右側みぎがわ左側ひだりがわをまとめててることはできません。

つまり 1 かい比較ひかく除外じょがいできるのは、いまている 1 だけです。ここから、A0,A1,A2,[PARSE ERROR: Undefined("Command(\"dots\")")]じゅん確認かくにんする方針ほうしん自然しぜんます。

2. 不変条件ふへんじょうけんてる

i 要素ようそ調しらえた時点じてんで、A0,A1,[PARSE ERROR: Undefined("Command(\"dots\")")],Ai-1 には x がなく、もし x存在そんざいするなら候補こうほAi,Ai+1,[PARSE ERROR: Undefined("Command(\"dots\")")],An-1 だけである、とかんがえます。

これが線形探索せんけいたんさく不変条件ふへんじょうけんです。

  • 開始時かいしじ、まだ 1 ていないので、候補こうほ配列はいれつ全体ぜんたいです。
  • つぎに Aiます。
  • もし Ai=x なら、その探索たんさく成功せいこうです。
  • もし Aix なら、Ai候補こうほからはずれます。したがってつぎ時点じてんでは、候補こうほAi+1,Ai+2,[PARSE ERROR: Undefined("Command(\"dots\")")],An-1 だけになります。

このようにして、1 かい比較ひかくするたびに候補こうほをちょうど 1 ずつらせます。

3. 終了条件しゅうりょうじょうけん計算量けいさんりょう

どこかで Ai=xつかれば、その添字そえじ iかえして終了しゅうりょうです。

最後さいごまで一致いっちがなければ、候補こうほからになります。つまり i=n まですすんだ時点じてんで、「この配列はいれつには x がない」と結論けつろんできます。

したがって、最悪さいあくでは n かい比較ひかく必要ひつようです。x先頭せんとうにあれば 1 かいわりますが、末尾まつびにあるか、存在そんざいしなければ n かいかかります。よって計算量けいさんりょうO(n) です。

どこまでつか

線形探索せんけいたんさくは、配列はいれつ整列せいれつしていなくても使つかえます。これはおおきな長所ちょうしょです。必要ひつようなのは、要素ようそ順番じゅんばんして比較ひかくできることだけです。

そのわり、1 かい比較ひかくてられる候補こうほは 1 しかありません。したがって、要素数ようそすうおおきいと探索たんさく時間じかんながくなります。

つまり、前提条件ぜんていじょうけんがほとんどいらないわりに、計算量けいさんりょうO(n) から改善かいぜんしません。

最終形さいしゅうけい

i=0,1,2,[PARSE ERROR: Undefined("Command(\"dots\")")],n-1じゅんAi=x調しらべ、最初さいしょ一致いっちした添字そえじかえします。

最後さいごまで一致いっちしなければ、「存在そんざいしない」と結論けつろんします。

したがって線形探索せんけいたんさく

[PARSE ERROR: Undefined("Command(\"boxed\")")]未確認の要素だけを候補として、左から[PARSE ERROR: Undefined("RBrace")]

であり、計算量けいさんりょう[PARSE ERROR: Undefined("Command(\"boxed\")")]O(n) です。

一言ひとことでいうと

  • 線形探索せんけいたんさくでは、1 かい比較ひかくてられる候補こうほは 1 だけです。
  • だから、未確認みかくにん部分ぶぶん候補集合こうほしゅうごうとしてち、ひだりから 1 ずつしていくとかんがえます。
  • この候補集合こうほしゅうごうかたが、線形探索せんけいたんさく本体ほんたいです。

関連かんれんリンク

data/lecture/information/algorithm/search/二分探索-講義.n.md
raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
path をコピー
copy share link
copy share link
タブを全て閉じる