SlideShare a Scribd company logo
1 of 27
Download to read offline
データ構造とアルゴリズム
住友 孝郎
はじめに
データ構造
集合(セット)
リスト
連想配列(マップ)
計算量について
目次
データ構造
実装例
考察
1.データ構造
集合(セット)
リスト
連想配列(マップ)
1-1.集合(セット)
ITATI
CAT
RACCOON
特徴
・順序を持たないデータの集まり
・同一のデータは1つしか含まない
用途
・特定のデータが含まれるかを判断する
FOX
CAT
CATは含まれていますか?
はい、含まれています
1-2.リスト
特徴
・順序を持つデータの集まり
・同一のデータを複数含められる
用途
・複数のデータを順番に格納する
・特定の番号のデータを取り出す
FOXCATRACCOON
ITATICATFOX
0 1 2 3 4 5
3番目のものを下さい
はい、これです
RACCOON
1-3.連想配列(マップ)
特徴
・添え字に数値以外のデータ型(文字列型等)が使用できる配列
用途
・ある値をキーに紐付くデータを取り出す
RACCOON
ITATI
CATFOX
キツネ ネコ イタチ アライグマ
ネコを下さい
はい、これです
CAT
2.実装例
前提知識
ハッシュ値
データ構造
集合(セット)
リスト
連想配列(マップ)
2-1.ハッシュ値
ハッシュ値とは
あるデータが与えられた場合に算出される、
そのデータを代表する数値
以下の条件を満たせば計算方法は自由
条件
同じデータのハッシュ値は常に同じであること
衝突は発生しても構わない
(ハッシュ値が同じでも異なるデータの場合がある)
2-1-1.ハッシュ値の例
文字数をハッシュ値として扱う場合
文字列 ハッシュ値
キツネ 3
ネコ 2
イタチ 3
アライグマ 5
キツネとイタチが衝突している
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
文字ごとに数値を割り当て、
その総和をハッシュ値として扱う例
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 ]×31
n−i −1
2-2-1.リスト
配列を用いた実装
FOX ITATICAT RACCOON FOXCAT
連続したメモリの領域
メリット
・アクセスが高速
デメリット
・データの追加と削除のオーバーヘッドが大きい
・連続したメモリの領域を必要とする
2-2-2.リスト
連結リストを用いた実装
FOX ITATI CAT RACCOON FOXCAT
メリット:
・データの追加と削除が容易
・メモリの領域が連続している必要がない
デメリット
・アクセスが低速
↑先頭
2-3-1.集合(セット)
二分探索木を用いた実装
CAT
FOX
ITATI
RABBIT
小さい
大きい
メリット
・データ構造内に順序性が保持されている
デメリット
・データの追加と削除のオーバーヘッドが大きい
RACCOON
ITATI
CAT
FOX
RABBIT
RACCOON
2-3-2.集合(セット)
ハッシュ値を用いた実装
メリット
・マップが十分に大きい場合、計算時間がO(1)である
デメリット
・ハッシュ関数の実装が必須
・マップがある程度大きくなくてはならずメモリを食う
FOX
ITATICATRACCOONRABBIT
0 1 2 3 4 5
配列
ハッシュ関数を、[文字数%6]とした例
2-4-1.連想配列(マップ)
アライグマ
イタチ
キツネ
ネコ
ネコ
イタチ
キツネ
アライグマ
小さい
大きい
二分探索木を用いた実装
FOXITATI CATRACCOON
2-4-2.連想配列(マップ)
ハッシュ値を用いた実装
イタチ
アライグマキツネ
0 1 2 3 4 5
ハッシュ関数を、[文字数%6]とした例
ネコ
FOXITATICAT RACCOON
3.計算量
配列の探索
ハッシュマップの探索
2分探索木の探索
3-1.配列の探索
配列の探索の例(線形探索)
配列から特定の要素を探する場合、先頭から順番に見ていくので
平均すると     回の比較が行われる。
個数
2
FOX ITATICAT RACCOON FOXCAT
3-2.ハッシュマップの探索
ハッシュマップの例
イタチ
アライグマキツネ
0 1 2 3 4 5
ネコという名前から、CATの実体を取得したい場合
ネコ
FOXITATICAT RACCOON
ネコ 2
ハッシュ値を算出
ハッシュ値が衝突しない限りは常に一定時間で目的の要素を見つける
ことができる
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(切り上げ)
3-3-2.二分探索木
二分木
要素数:5
最大4回の比較
63
75
72
51
14
完全二分木で無い場合は大きくなる
完全でない二分探索木の例
3-4-1.計算量のグラフ
配列の探索(線形探索)
y =n
Θ n
完全二分探索木
y =log 2 n
Θ log 2 n
ハッシュマップ
y =1
Θ 1
計算量のグラフ
3-4-2.計算量のグラフ
配列の探索(線形探索)
y =n
2
Θ n
2

完全二分探索木
y =n× log 2 n
Θ nlog 2 n
ハッシュマップ
y =n
Θ n
n×nのデータを紐づける場合の計算量
4.まとめ
データ構造の選択によっては計算量を抑えることができる
状況に応じて適切なデータ構造を選択すること
計算量が跳ね上がるものは一定量を超すと
突然動かなくなるので極力避けること
計算量が大きい場合は必ず設計時に見積もりを取り、
運用上の注意に挙げること
データ構造とアルゴリズム
ご静聴ありがとうございました
企画・製作
住友

More Related Content

More from Takao Sumitomo

Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドCamera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドTakao Sumitomo
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことTakao Sumitomo
 
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なことTakao Sumitomo
 
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてることTakao Sumitomo
 
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたMaker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたTakao Sumitomo
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチTakao Sumitomo
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることTakao Sumitomo
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするTakao Sumitomo
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことTakao Sumitomo
 
Wantedlyのテスト事情
Wantedlyのテスト事情Wantedlyのテスト事情
Wantedlyのテスト事情Takao Sumitomo
 
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法Takao Sumitomo
 
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料Takao Sumitomo
 
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くSQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くTakao Sumitomo
 
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程Takao Sumitomo
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜Takao Sumitomo
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要Takao Sumitomo
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいかTakao Sumitomo
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうTakao Sumitomo
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告Takao Sumitomo
 

More from Takao Sumitomo (20)

Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドCamera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
 
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
 
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること
 
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたMaker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれること
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
Wantedlyのテスト事情
Wantedlyのテスト事情Wantedlyのテスト事情
Wantedlyのテスト事情
 
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
 
Uml速習会
Uml速習会Uml速習会
Uml速習会
 
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料
 
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くSQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗く
 
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいか
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろう
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告
 

Recently uploaded

次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラムKochi Eng Camp
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 

Recently uploaded (8)

次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 

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