• 検索結果がありません。

アルゴリズム論 (第10回)

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズム論 (第10回)"

Copied!
7
0
0

読み込み中.... (全文を見る)

全文

(1)

アルゴリズム論

(第10回)

佐々木研(情報システム構築学講座)

講師 山田敬三

[email protected]

(2)

探索

(3)

線形探索

入力:配列a,値x

要素a[i] (i=0,1,・・・,N-1)

配列aから値xを探索

i=0N-1まで,以下を繰り返す.

a[i]xを比較

a[i]==x なら終了

(4)

二分探索

(binary search)

前提条件

要素a[i](i=0,1,・・・,N-2,N-1)について a[0]<a[1]<・・・<a[N-2]<a[N-1]

が成り立つとする.

x のあるべき場所を求める.

(注意) x が配列 a にあるか否かではない.

返値:

𝑖𝑖 = �0 𝑥𝑥 ≤ 𝑎𝑎[0]

𝑗𝑗 𝑎𝑎 𝑗𝑗 − 1 < 𝑥𝑥 ≤ 𝑎𝑎 𝑗𝑗 1 ≤ 𝑗𝑗 ≤ 𝑁𝑁 − 1

𝑁𝑁 𝑎𝑎 𝑁𝑁 − 1 < 𝑥𝑥

(5)

二分探索

(binary search)

アルゴリズム (P.8283

1. x a[0] または x > a[N-1] であるかどうかを調査する.

以降,a[0] < x a[N-1] の場合のみを考える.

2. left right について初期化する.

left = 0, right = N - 1

3. 探索する配列の中央を探す.

middle = (left + right) / 2

4. x と中央の値 a[middle] を比較する.

1. x a[middle] 以下の場合は,right = middle にする.

2. x a[middle] よりも大きい場合は,left = middle にする.

5. 34 right – left <= 1 になるまで繰り返す.

6. right を返す.

(6)

計算量

検索範囲は,一回比較すると元の配列

1/2

となる.

比較する回数

k

は,全体の要素数

N

すると

2

k

= N

すなわち

k = log

2

N

よって,二分探索の計算量は

O(logN)

(7)

使うときの注意点

検索結果 i を用いて必ず配列を確認する.

1. アルゴリズムは N を返すことがあるが,

配列は a[N-1] までしか存在しない

(a[N] を参照しようとするとエラーとなる)

2. x が配列 a の中に見つかるとは限らない.

すなわち,x == a[i] とは限らないので, 検査する必要がある.

参照

関連したドキュメント

乗次 章子 非常勤講師 社会学部 春学期 English Communication A11 乗次 章子 非常勤講師 社会学部 春学期 English Communication A23 乗次 章子

条第三項第二号の改正規定中 「

第7回 第8回 第9回 第10回

そして会場は世界的にも有名な「東京国際フォーラ

エドワーズ コナー 英語常勤講師(I.E.F.L.) 工学部 秋学期 英語コミュニケーションIB19 エドワーズ コナー

講師 (一般)ダイバーシティ研究所 代表理事/復 興庁復興推進参与

9月30日 (水) 構造(船殻)設計 ・講師:小沼 守 ・講師:中尾 強志 ・講師:佐々木 吉通(NK) ・講師:宇宿 行史(NK)