SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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

Contenu connexe

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

Itパスポート3
Itパスポート3Itパスポート3
Itパスポート3
takadanopapa
 
131102ちゅらシム・プレゼン
131102ちゅらシム・プレゼン131102ちゅらシム・プレゼン
131102ちゅらシム・プレゼン
Ikegami Keiichi
 

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

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

Plus de エンジニア勉強会 エスキュービズム

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

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

Dernier

Dernier (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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