SlideShare a Scribd company logo
0
アルゴリズムとデータ構造
エスキュービズム・テクノロジー
エンジニア勉強会
December 4,2015
S-cubism Technology Inc.
今日の発表内容
• アルゴリズムとは
• 1.データのソート
• 2.ソートについて
• 3.文字列の検索について
• 実行してみた
• まとめ
1
アルゴリズムとは
• アルゴリズム(英: algorithm)とは、数学、コン
ピューティング、言語学、あるいは関連する分
野において、問題を解くための手順を定式化
した形で表現したものを言う。
(Wikipediaより引用)
2
ITにおけるアルゴリズム
• 処理を実行する手順をさすため、この上なく
重要
• より正確な処理、より早い処理を行わせるた
めに常日頃から意識しておく必要がある
3
1.データのソート
• データの並び替え(ソート)を行うアルゴリズム
にも方法は多岐にわたる
• 元データの量やどういった処理を行わるかに
より使い分けるべき
4
おもなソート
• ソートには大きく上げて3つの方法がある
• バブルソート
• クイックソート
• マージソート
5
バブルソート、クイックソート
• バブルソート:
先頭から順にデータを
参照していき、連続する
データの並びが
おかしい部分をひたすら並び替えて
正していく手法
6
• 非常にシンプルな処理でソートができるが、
データ量が多くなると処理に尋常でない時間
を要するうえ、余計な処理も目立つ。
→ループを終えるとデータの最後の部分は
ソート済みになっているはず
• このバブルソートを改良したのが
“クイックソート”である。
7
• クイックソート:
• 先述のバブルソートの改良版といえる手順
• ある基準のデータを1つ決め、そのデータとす
べてのデータを比較し、より小さいグループ、
より大きいグループの二つに分ける。
さらにグループ内で同様の手順を行い、
これ以上グループ分けできなくなれば終了
8
マージソート
• バブルソート、クイックソートより効率が良いと
されている手法
• マージソートはデータを1つずつに分割し、
隣り合ったグループ同士をマージしながらソ
ートしていく
9
• クイックソート、マージソートを実際に行うと
このようになる
• クイックソート・・8:39
• マージソート・・47:48
10
最適なソートとは
• ケースバイケースである。状況によって適した手法
を考慮して選択する必要がある。
• マージソートはクイックソートより効率が良いが、より
多くのメモリを必要とする一面もある
• データ量が多い場合はマージソート、クイックソート
を用いるのが良いが、データ量が少ない場合はバ
ブルソートで充分なケースも
11
2.サーチについて
• ご存じ、目的のデータが(どこに)あるかどうか
を調べる手法
• 大きく分けて
リニアサーチ
バイナリサーチ
の二種類がある。
12
リニアサーチ
• 先頭から順番にデータを探していき、目的の
データがあればその場所を返す、という手法
• とてもシンプルで力づくな印象を受けるが、
不規則なデータ配列から目的のデータを検索
する場合は基本的にはこの手法が一番早い
13
バイナリサーチ
• 配列データに何らかの規則性がある場合、
その規則に則ってサーチを行えばより効率的
に目的のデータを見つけることができる。
• (整列された)データを大きく二つに分け、目的
のデータが分割した点より前にあるか後にあ
るかを調べ続ける手法がバイナリサーチ
(二分検索法)である。
14
サーチの手法によるデータ量と計算量の関係
15
リニアサーチはy=O(N)
バイナリサーチはy=O(logN)の関係性となり、
(整列された)データのサーチにおいては
バイナリサーチが圧倒的に早いといえる。
• 一方、バイナリサーチは
データが”ソートされている必要がある”ため、
ソートを含めて考慮する必要がある
• 既にソートされているデータ、あるいは一つの
データに対して複数回のサーチを行う場合は
バイナリサーチを、サーチの回数が少ない場
合はリニアサーチを用いるなど使い分けると
よい
16
3.文字列の検索について
• 配列の中からデータを探し出す手法は先ほ
どのリニアサーチ、バイナリサーチといったも
の
• 文字列の中から検索したいワードと一致する
部分があるかどうかを検索するのが文字列
検索
17
• もっとも単純な文字列検索
• 検索キーの先頭と検索対象の文字列の文字を比較
• 文字列の文字と一致しなければ文字列の文字を一
字進める
• 文字列の文字と検索キーの文字が一致したら検索
キーの次の文字を比較する
• キーの途中で一致しない文字列が現れたら再度キ
ーの先頭から比較する
• 検索キーの最後の文字まで一致したら検索終了
18
• 非常に単純でバグを生みづらいため、
現状この方式が多く用いられている
• 検索効率に着目すると、文字列の長さをm、
検索キーの長さをnとするとO(mn)となる為
あまりいいとは言えない
• 検索効率を重視したい場合は他の方式をも
ちいるとよい
19
KMP法(Knuth-Morris-Pratt Method)
• 先ほどの手法から無駄を省くために、比較し
て不一致だった際のルールを改善する手法
• ①:比較して不一致だった場合、キーの先頭
文字が出現するまでは比較を行わなくてもよ
い
• ②部分的に一致することがわかっている場合
は比較を行わなくてもよい
20
KMP法の短所
• これにより検索量はO(n)となり、
(理論上は)大幅に効率が改善された。
• しかしアルゴリズムが複雑であるが故にオー
バーヘッドが大きく、検索条件によっては
改善前の文字列検索の方が
良好なパフォーマンスを示すことも多い。
21
現実的に優れた方法(BM法)
• BM法(Boyer-Moore Method)とは
文字列検索の
「キーの先頭→末尾」の順に比較する処理を
「キーの末尾→先頭」の順に比較するように
変更した方法
22
BM法のアルゴリスム
• 1.パターンの末尾から先頭へ向かって比較を行う
• 2.不一致の場合、本文側の文字がパターンに含ま
れていない場合はパターンの先頭をその次の位置
に移動する
• 3.不一致の場合に本文側の文字がパターンに含ま
れている場合、パターンの中で最後にその文字が
出てくる部分を不一致点に移動させる。
ただし、この際パターンが前に戻ってしまう場合、
パターンを前に戻さず、一つ後ろに戻す。
23
• 末尾から比較するメリット
• 検索量もほぼO(m/n)となり、非常に優れてい
るといえる。
24
ソートを実行してみた例
• ソート対象:ランダムに生成された1000ある
いは10000個の数字
• ソート手法:バブル、クイック、マージ
• 調べる事柄:処理にかかる時間
25
• ランダムな数字1000個をソートする場合
• バブルソート: 15~16[ms]
• クイックソート: 1~2[ms]
• マージソート: 1~2[ms]
• ちなみにデータ量が10、100などの場合はバ
ブルソートでも要する時間はごく短く、他2つ
の手法と変わりはない。
26
• データ量を10000にした場合
• バブルソート: およそ1400~1600[ms]
• クイックソート: 4~6[ms]
• マージソート: 4~5[ms]
• バブルソートが目に見えて処理に時間を要す
るようになる。
• データ量が莫大な際のバブルソートは非推奨
27
まとめ
• 処理の効率、正確さ、速度、メモリの使用量
などは、どの手法を用いるかによって異なる
為、
どのような処理を求められているかを
よく考えたうえで選択するのが好ましいと
考えられる。
28
参考文献
• プログラミングの宝箱 アルゴリズムとデータ構造
第二版
(紀平拓男・春日伸弥 著)
29

More Related Content

ODP
javaによるアルゴリズム入門
PDF
最速でデータサイエンティストになる方法を考えてみた
PDF
勉強会資料 データ構造とアルゴリズム
PDF
2011年10月7日
PDF
競技プログラミングでの線型方程式系
PDF
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
PDF
5分で分か(った気にな)る人工知能入門
PDF
iosアプリ開発〜学習が開花して理解したこと〜
javaによるアルゴリズム入門
最速でデータサイエンティストになる方法を考えてみた
勉強会資料 データ構造とアルゴリズム
2011年10月7日
競技プログラミングでの線型方程式系
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
5分で分か(った気にな)る人工知能入門
iosアプリ開発〜学習が開花して理解したこと〜

Similar to アルゴリズムとデータ構造(初歩) (8)

PPTX
ジャストシステムの形態素解析技術
PDF
Itパスポート3
PDF
IT エンジニア本大賞 2021 講演資料
PDF
17.01.18_論文紹介_Discrimination- and privacy-aware patterns
PDF
自由文思考プログラミング環境における手続的機能の実装
ODP
javaによるアルゴリズム入門 part1
PDF
コンピューターの整列処理におけるデータ操作の時間的共起分析
PDF
131102ちゅらシム・プレゼン
ジャストシステムの形態素解析技術
Itパスポート3
IT エンジニア本大賞 2021 講演資料
17.01.18_論文紹介_Discrimination- and privacy-aware patterns
自由文思考プログラミング環境における手続的機能の実装
javaによるアルゴリズム入門 part1
コンピューターの整列処理におけるデータ操作の時間的共起分析
131102ちゅらシム・プレゼン
Ad

More from エンジニア勉強会 エスキュービズム (20)

PDF
エスキュービズム新技術発表資料
PDF
小売りにおけるAIの可能性
PDF
React Redux Redux-Saga + サーバサイドレンダリング
PDF
Azure container service上でコンテナベースでオートスケールの検証をしてみた
PDF
Go言語によるWebアプリケーション開発
PDF
機械学習ライブラリ : TensorFlow
PDF
Developer Summit 2016 参加してきました。
PDF
2016 新人研修 基本技術講座 (1)
PDF
Dockerを用いたマイクロサービスについて
PDF
Azureで動いている機械学習のいろいろについて
PDF
何故エンジニアはテストをしないのか
PDF
PDF
【エンジニア勉強会】品質ってなんなのさ
PDF
【エンジニア勉強会】PMやってみた
エスキュービズム新技術発表資料
小売りにおけるAIの可能性
React Redux Redux-Saga + サーバサイドレンダリング
Azure container service上でコンテナベースでオートスケールの検証をしてみた
Go言語によるWebアプリケーション開発
機械学習ライブラリ : TensorFlow
Developer Summit 2016 参加してきました。
2016 新人研修 基本技術講座 (1)
Dockerを用いたマイクロサービスについて
Azureで動いている機械学習のいろいろについて
何故エンジニアはテストをしないのか
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】PMやってみた
Ad

アルゴリズムとデータ構造(初歩)