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

アルゴリズム論 (第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-1)

について

a[0]<a[1]<

・・・

<a[N-1]

が成り立つ

配列

a

から値

x

の場所を求める

(

注意

) x

が配列

a

にあるか否かは返らない.

返値

:

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

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

𝑁𝑁 𝑎𝑎 𝑁𝑁 − 1 < 𝑥𝑥

(5)

二分探索

(binary search)

アルゴリズム (

P.82

83

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. xa[middle]以下の場合は、新しい探索配列の右側を

middleにする

2. xa[middle]よりも大きい場合は、新しい探索配列の左側

middleにする

5. 3

4

right-left<=1

になるまで繰り返す。

(6)

計算量

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

1/2

となる

比較する回数

k

は、全体の要素数

N

すると

2

k

= N

すなわち

k=log

2

N

よって、

O(logN)

(7)

使うときの注意点

検索結果

i

を用いて必ず配列を確認する

アルゴリズムは

N

を返すことがあるが,

配列は

a[N-1]

までしか存在しない

(a[N]

を参照しようとするとエラーとなる

)

• x

が配列

a

の中に見つかるとは限らない.

すなわち,

x == a[i]

とは限らないので

,

検査する必要がある

.

参照

関連したドキュメント

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

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

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

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

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

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

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