講義ノート

 

夜久竹夫

 

2002.7.31記

2002.8.27改定
2002年9月9日改定

 

データ探索法

 

1.序論

レベル:基本情報処理技術者試験に準じる

 

2.二分探索木

2.1 二分探索木のアルゴリズム

2.2 二分探索木の実装

 

5.B木

3.1 B木

3.2 B木の実装

 

3. ハッシュコード

3.1 チェイン法とオープンアドレス法

3.2 ハッシュコードの実装

 

4.深さ優先探索

4.1 深さ優先探索のアルゴリズム

4.2 深さ優先探索の実装

4.3 深さ優先探索の応用

 

5. 幅優先探索

5.1 幅優先探索のアルゴリズム

5.2 幅優先探索の実装

5.3 幅優先探索の応用

 

6. 最短経路探索

5.1 最短道のアルゴリズム

6.2 最短道アルゴリズムの実装

 

7. データベース

7.1 データベースの分類

7.2 SQL、標準形、

 

8. まとめ

 

演習課題

(1)<10月第1週> 二分探索木

(2)<10月末> B木

(3)<11月文化祭明け> ハッシュ法(チェイン法)(オープンアドレス法)

(4)<11月末> 深さ優先探索

(5)<年末> 幅優先探索

(6)<年明け> 最短経路探索

(7)<試験前> SQL机上演習(例題)

 

 

 

1.序論

レベル:基本情報処理技術者試験に準じる

 

2.二分探索木

 

2分探索の利点を採用する手法

 

平均値

探索

log n

作成

log n

 

 

 

 

2.1 二分探索木のアルゴリズム

探索

入力    x

        T

出力    y       hit

                non hit

 

作成

入力    x (n data)

出力    T

 

2.2       二分探索木の実装

 

 

 

5.B木

 

多分木

二分探索木の改良モデル:常にバランスするように

外部記憶装置で用いられる

 

最悪時間も log n となる

 

キー値

 

3.1 B木

最大m 個の子を持つ B-木

        根は葉であるか、あるいは 2 – m 個の子を持つ

        根と葉以外の節は、([m/2]- m 個の子を持つ

        根からすべての葉までの経路の長さは等しい

        k 個の子を持つ親は (k – 1 )個のキーをもっている

        すべての葉は、同じレベルにあって、キー値をもたない。

 

 

 

3.2       B木の実装

 

 

 

3. ハッシュコード

ハッシュ法。2分探索と逐次探索の良いところを使う手法

目標

      探索   作成

平均時間  logn  n

 

方法

ハッシュ法の表:昇順が基本

(各データに対してあらかじめ格納場所が決められている)

(同じ場所に入るデータが複数あったら別の場所に格納する:その時の格納場所を決めるのがハッシュ関数)

ハッシュ値:ハッシュ関数により定められた格納場所

 

(1)作成

入力データ:数値、1<x<100

出力データ:配列 T(10)

データ構造:1から10はT(1)。11から20はT(2)、。。。

        hash(i) = (i-1) mod 10

11 と 12 が来たら、T(11)以降につなげる。

 

(2)探索

入力    y

        T(100)

出力    not hit (if y not in T)

        hit    (if y in T)

 

方法

入力データ: 1, 23, 45, 24が来たら→

T

T(i)の内容

T(1)

1

T(2)

23

3

 

4

45

5

 

6

 

7

 

8

 

9

 

10

 

11

24

 

 

 

 

3.1 チェイン法とオープンアドレス法

衝突:ハッシュ関数の値が同じデータが現れる

衝突したデータの格納法の例→チェイン法とオープンアドレス法

(1)チェイン法

衝突したとき→リンクにより、本の番地につなげる

        利点   元のハッシュ表がくずれていない

        欠点    データ構造が複雑になる

 

(2)オープンアドレス法

例:線形走査法

        衝突したとき→後ろ側で一番近くで空いている場所に格納する。

        利点    元のハッシュ表のデータ構造が簡単

        欠点    ハッシュ表の順番がくずれる

 

3.2 ハッシュコードの実装

 

4.深さ優先探索

グラフの頂点全部を探索する方法の一つ

スタックを用いる。

頂点に関する線形時間

 

4.1 深さ優先探索のアルゴリズム

4.2 深さ優先探索の実装

4.3 深さ優先探索の応用

 

5. 幅優先探索

グラフの頂点全部を探索する方法の一つ

キューを用いる。

 

5.1 幅優先探索のアルゴリズム

5.2 幅優先探索の実装

5.3 幅優先探索の応用

 

6. 最短経路探索

グラフの2頂点間の最短経路を見つける方法

カーナビなどで用いられる

計算時間を早くするために研究が続いている

 

一番簡単なアルゴリズム→深さ優先探索→計算時間がかかる

 

5.1 最短道のアルゴリズム

6.2 最短道アルゴリズムの実装

 

7. データベース

7.1 データベースの分類

7.2 SQL、標準形、

 

8. まとめ

 

演習課題

(1)<10月第1週> 二分探索木

(2)<10月末> B木

(3)<11月文化祭明け> ハッシュ法(チェイン法)(オープンアドレス法)

(4)<11月末> 深さ優先探索

(5)<年末> 幅優先探索

(6)<年明け> 最短経路探索

(7)<試験前> SQL机上演習(例題)