勉強会資料 データ構造とアルゴリズム

27
データ構造とアルゴリズム 住友 孝郎

Upload: takao-sumitomo

Post on 20-Jul-2015

303 views

Category:

Education


5 download

TRANSCRIPT

Page 1: 勉強会資料 データ構造とアルゴリズム

データ構造とアルゴリズム

住友 孝郎

Page 2: 勉強会資料 データ構造とアルゴリズム

はじめに

データ構造集合(セット)リスト連想配列(マップ)

計算量について

Page 3: 勉強会資料 データ構造とアルゴリズム

目次

データ構造実装例考察

Page 4: 勉強会資料 データ構造とアルゴリズム

1.データ構造

集合(セット)リスト連想配列(マップ)

Page 5: 勉強会資料 データ構造とアルゴリズム

1-1.集合(セット)

ITATICAT RACCOON

特徴・順序を持たないデータの集まり・同一のデータは1つしか含まない用途・特定のデータが含まれるかを判断する

FOX

CAT

CATは含まれていますか?

はい、含まれています

Page 6: 勉強会資料 データ構造とアルゴリズム

1-2.リスト特徴・順序を持つデータの集まり・同一のデータを複数含められる用途・複数のデータを順番に格納する・特定の番号のデータを取り出す

FOXCATRACCOONITATICATFOX

0 1 2 3 4 5

3番目のものを下さい

はい、これです

RACCOON

Page 7: 勉強会資料 データ構造とアルゴリズム

1-3.連想配列(マップ)

特徴・添え字に数値以外のデータ型(文字列型等)が使用できる配列用途・ある値をキーに紐付くデータを取り出す

RACCOONITATICATFOX

キツネ ネコ イタチ アライグマ

ネコを下さい

はい、これです

CAT

Page 8: 勉強会資料 データ構造とアルゴリズム

2.実装例

前提知識ハッシュ値

データ構造集合(セット)リスト連想配列(マップ)

Page 9: 勉強会資料 データ構造とアルゴリズム

2-1.ハッシュ値

ハッシュ値とはあるデータが与えられた場合に算出される、そのデータを代表する数値

以下の条件を満たせば計算方法は自由条件

同じデータのハッシュ値は常に同じであること衝突は発生しても構わない(ハッシュ値が同じでも異なるデータの場合がある)

Page 10: 勉強会資料 データ構造とアルゴリズム

2-1-1.ハッシュ値の例

文字数をハッシュ値として扱う場合

文字列 ハッシュ値キツネ 3ネコ 2イタチ 3アライグマ 5

キツネとイタチが衝突している

Page 11: 勉強会資料 データ構造とアルゴリズム

2-1-2.ハッシュ値の例

文字に割り当てる数値文字 数値 文字 数値 文字 数値 文字 数値ア 1ナ 21ル 41ド 61イ 2ニ 22レ 42バ 62ウ 3ヌ 23ロ 43ビ 63エ 4ネ 24ワ 44ブ 64オ 5ノ 25ヲ 45ベ 65カ 6ハ 26ン 46ボ 66キ 7ヒ 27ガ 47パ 67ク 8フ 28ギ 48ピ 68ケ 9ヘ 29グ 49プ 69コ 10ホ 30ゲ 50ペ 70サ 11マ 31ゴ 51ポ 71シ 12ミ 32ザ 52ァ 72ス 13ム 33ジ 53ィ 73セ 14メ 34ズ 54ゥ 74ソ 15ノ 35ゼ 55ェ 75タ 16ヤ 36ゾ 56ォ 76チ 17ユ 37ダ 57ャ 77ツ 18ヨ 38ヂ 58ュ 78テ 19ラ 39ヅ 59ョ 79ト 20リ 40デ 60

文字列 計算 ハッシュ値キツネ 7+18+24 49ネコ 24+10 34イタチ 2+16+17 35アライグマ 1+39+2+49+31 94

文字ごとに数値を割り当て、その総和をハッシュ値として扱う例

Page 12: 勉強会資料 データ構造とアルゴリズム

2-1-3.ハッシュ値の例

Javaの実装

文字列をsとし、文字数をnとするとき、

 ハッシュ値 = s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

=∑i =0

n−1

s[i ]×31n−i −1

Page 13: 勉強会資料 データ構造とアルゴリズム

2-2-1.リスト配列を用いた実装

FOX ITATICAT RACCOON FOXCAT

連続したメモリの領域

メリット・アクセスが高速デメリット・データの追加と削除のオーバーヘッドが大きい・連続したメモリの領域を必要とする

Page 14: 勉強会資料 データ構造とアルゴリズム

2-2-2.リスト

連結リストを用いた実装

FOX ITATI CAT RACCOON FOXCAT

メリット:・データの追加と削除が容易・メモリの領域が連続している必要がないデメリット・アクセスが低速

↑先頭

Page 15: 勉強会資料 データ構造とアルゴリズム

2-3-1.集合(セット)

二分探索木を用いた実装

CAT

FOX

ITATI

RABBIT

小さい

大きい

メリット・データ構造内に順序性が保持されているデメリット・データの追加と削除のオーバーヘッドが大きい

RACCOON

ITATI

CAT

FOX

RABBIT

RACCOON

Page 16: 勉強会資料 データ構造とアルゴリズム

2-3-2.集合(セット)

ハッシュ値を用いた実装メリット・マップが十分に大きい場合、計算時間がO(1)であるデメリット・ハッシュ関数の実装が必須・マップがある程度大きくなくてはならずメモリを食う

FOX

ITATICATRACCOONRABBIT

0 1 2 3 4 5

配列

ハッシュ関数を、[文字数%6]とした例

Page 17: 勉強会資料 データ構造とアルゴリズム

2-4-1.連想配列(マップ)

アライグマ

イタチ

キツネ

ネコ

ネコ

イタチ

キツネ

アライグマ

小さい

大きい

二分探索木を用いた実装

FOXITATI CATRACCOON

Page 18: 勉強会資料 データ構造とアルゴリズム

2-4-2.連想配列(マップ)

ハッシュ値を用いた実装

イタチ

アライグマキツネ

0 1 2 3 4 5

ハッシュ関数を、[文字数%6]とした例

ネコ

FOXITATICAT RACCOON

Page 19: 勉強会資料 データ構造とアルゴリズム

3.計算量

配列の探索ハッシュマップの探索2分探索木の探索

Page 20: 勉強会資料 データ構造とアルゴリズム

3-1.配列の探索

配列の探索の例(線形探索)

配列から特定の要素を探する場合、先頭から順番に見ていくので

平均すると     回の比較が行われる。個数2

FOX ITATICAT RACCOON FOXCAT

Page 21: 勉強会資料 データ構造とアルゴリズム

3-2.ハッシュマップの探索ハッシュマップの例

イタチ

アライグマキツネ

0 1 2 3 4 5

ネコという名前から、CATの実体を取得したい場合

ネコ

FOXITATICAT RACCOON

ネコ 2ハッシュ値を算出

ハッシュ値が衝突しない限りは常に一定時間で目的の要素を見つけることができる

Page 22: 勉強会資料 データ構造とアルゴリズム

3-3-1.二分探索木

完全二分木要素数:15最大4回の比較

完全二分木要素数:7最大3回の比較完全二分木

要素数:3最大2回の比較

完全二分探索木の例

15

10 18

21

1 25 39

38

55

64

6

4 8 23

14

34

38

63

57 69 75

72

84

93

51

要素数がn個の最大計算量 = log2n(切り上げ)

Page 23: 勉強会資料 データ構造とアルゴリズム

3-3-2.二分探索木

二分木要素数:5最大4回の比較

63

75

72

51

14

完全二分木で無い場合は大きくなる

完全でない二分探索木の例

Page 24: 勉強会資料 データ構造とアルゴリズム

3-4-1.計算量のグラフ

配列の探索(線形探索)

y=nΘ n

完全二分探索木

y=log 2 nΘ log 2 n

ハッシュマップ

y=1Θ 1

計算量のグラフ

Page 25: 勉強会資料 データ構造とアルゴリズム

3-4-2.計算量のグラフ

配列の探索(線形探索)

y=n2

Θ n2

完全二分探索木

y=n× log 2 nΘ nlog 2 n

ハッシュマップ

y=nΘ n

n×nのデータを紐づける場合の計算量

Page 26: 勉強会資料 データ構造とアルゴリズム

4.まとめ

データ構造の選択によっては計算量を抑えることができる 状況に応じて適切なデータ構造を選択すること

計算量が跳ね上がるものは一定量を超すと 突然動かなくなるので極力避けること

計算量が大きい場合は必ず設計時に見積もりを取り、 運用上の注意に挙げること

Page 27: 勉強会資料 データ構造とアルゴリズム

データ構造とアルゴリズム

ご静聴ありがとうございました

企画・製作

住友