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

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
11
0
0

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

全文

(1)

アルゴリズム論

(第11回)

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

講師 山田敬三

[email protected]

(2)

ハッシュ法

(3)

ハッシュ テーブル

対象データはレコード

レコードは互いに異なるキーを含む

キーを適当な範囲の自然数に変換し,

配列にレコードを格納,検索する方法.

(4)

ハッシュ テーブル

キーの値が,レコードの格納位置に対応していれば

検索が速い.配列

a[0], a[1],

・・・

, a[N-2], a[N-1]

に,レコードのキー

i

に対して,

a[i]

にデータを格 納すればよい.

しかし,

i

が配列のサイズよりも大きい場合や,

キーが自然数でない場合は,この方法は使えない.

そこで,キーを適当な自然数に変換する関数を考え る⇒ハッシュ関数

(5)

ハッシュ テーブル

ハッシュ関数 H を適用し,一次インデックス値を得る.

一次インデックス値は,配列の要素数 N よりも 小さい非負の整数値とする.

一次インデックス値とキーは 1 1 であることが望ましいが,

ここでは問わない(難しい).

H(k1) = H(k2) となる状況を衝突 (collision) という.

C で学ぶデータ構造とプログラム (p. 86) のプログラムを参照

ここでは、先頭文字と最終文字と長さに依存しているため,

同じハッシュ値になるものは簡単に見つかる.

例: ABC” AZC” は同じハッシュ値になる

(6)

ハッシュ テーブル

同じハッシュに対応するための方法.

1. 連結法では,レコードを多数の線形リストとして格納する.

2. オープンアドレス法では,

与えられた配列にすべてのデータを格納する.

衝突した場合,同じ場所にすでにデータが入っているので

,このままではデータを格納できない.

次の配列番号の配列要素にデータを格納する i + 1 (i < N – 1 のとき ) または

0 (i = N – 1 のとき ) を衝突が解消するまで繰り返す.

⇒線形探査法 (linear probing)

• P.88 のプログラムを参照

(7)

線形探査法

ABC AZC

hash

1027

1027

hash

1027

1028

(8)

ハッシュ テーブル

線形探査法は単純で魅力的!

しかし,同じ一次インデックス値が続くと効率が悪くなる.

1 つずつ配置をずらすのが原因.

衝突が起こったときに、増分を別のハッシュ関数で求める.

増分を用いて循環的に足し算する.

ダブルハッシュ法

循環的に足し算するので,配列の大きさ N が素数で無い場 合は,メモリ効率が悪くなることがある.

増分 inc N よりも小いとしても一般性を失わない.

inc inc % N は同じ役割を果たす.

(9)

ダブルハッシュ法

ABC AZC

hash

1027

1027

hash

1027

Second hash

+ 234 =1261

・・・・・・・

・・・・・・・

1261

(10)

ダブルハッシュ法

ABC AZC

hash

1027

1027

hash

1027

Second hash + 234 =1261

・・・・・・・

・・・・・・・

1261 1492

1261+234=1495 1495%1493=2

・・・・

2

・・・・

(11)

ハッシュ テーブル

• P.90

92

のプログラムを参照

ダブルハッシュ法は,レコードの数よりも十分大 きな配列を用意することが望ましい

参照

関連したドキュメント

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

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

2020年度 2019年度 2018年度 2017年度 2016年度 回数 0回 11回 12回 12回

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

附則(令和3年11月11日 原規規発第 2111112

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

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