Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アルゴリズムと計算量
Search
kab0718
February 07, 2024
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アルゴリズムと計算量
kab0718
February 07, 2024
More Decks by kab0718
See All by kab0718
visxに触ってみた話
kab0718
0
250
お嬢様言葉
kab0718
0
150
アイドルとコミュニケーション
kab0718
0
34
ブラウザレンダリングについて(簡易版)
kab0718
0
70
コーディングで意識してること
kab0718
0
57
趣味とぷよぐらみんぐ
kab0718
0
230
SDLアプリコンテスト2019プレゼン資料
kab0718
0
62
近況報告
kab0718
0
1.4k
アイドル×アイドル
kab0718
0
160
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Skip the Path - Find Your Career Trail
mkilby
1
170
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
エンジニアに許された特別な時間の終わり
watany
108
250k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
400
Transcript
計算量とアルゴリズム
はじめに 問題を解く手順のことをアルゴリズムと呼ぶ 一般的に一つの問題を解決するアルゴリズムは複数考えられる どうやってアルゴリズムの良し悪しを判断するか そもそも良いアルゴリズムとは?
良いアルゴリズム = 計算量が少ない
計算量とは アルゴリズムを実行するのに必要なリソースを示す指標 • 時間計算量 かかる時間やステップ数がどれくらいか • 空間計算量 消費するメモリがどれくらいか
基本的に計算量は入力に依存する 時間計算量と空間計算量はトレードオフの関係にある
計算量オーダー 計算量を大まかに測れるもの 入力サイズnが大きくなった場合にどうなっていくか 上記をO(n)やO(logn)のように表現する O(n): nに比例した回数の計算ステップを要する O(logn): lognに比例した回数の計算ステップを要する n
logn n^2 10 3 100 20 4 400 100 7 10,000 300 8 90,000 1000 10 1,000,000
計算量の求め方 右記のプログラムの計算量を求める 1. 各行のステップ数を足して全体の ステップ数を算出する ...1+n^2+n^2+1 = 2+2n^2 2.
最大次数以外の項を除く ...2+2n^2 → 2n^2 3. 係数を除く ...2n^2 → n^2 このコードの計算量は O(n^2)
計算量の求め方 Q. なんで最大次数以外の項を除くの? A. nが大きくなると他の項がほぼ無視できるため 例)ステップ数が2n^2+10n+10, n=10000 2n^2+10n+10
= 200100010 2n^2 = 200000000 Q. 係数を除くのはなぜ? A. 計算量の定義上、定数倍程度の違いはさほど重要じゃない O(n^3)とO(10n^2)だと10n^2の方が早いので
有名なアルゴリズム min <= x < max におけるxの値を特定したいときの手法 • 線形探索法: O(n)
minから順に比較していく • 二分探索法: O(logn) 2/max以上かを繰り返し確認していく ソート済のものにしか使えない
ソートアルゴリズム(最悪/平均/最良) • クイックソート: O(n^2)/O(nlogn)/O(nlogn) 基準値を決めてそれより大きい配列と小さい配列に分割 上記を再帰的に繰り返し行う • 選択ソート: O(n^2)/O(n^2)/O(n^2) 最小の要素を見つけ先頭の要素と入れ替え
先頭の要素を除いて最小を見つけ二番目の要素と入れ替え... • バブルソート: O(n^2)/O(n^2)/O(n) 先頭から順に隣接する要素と比較して入れ替え 最後から二番目の要素まで上記繰り返し
最後に • 場面によって最適なアルゴリズムは異なる • 計算量はデータ構造(配列,連結リスト,ツリー...)でも変化する • アルゴリズム調べると色々な問題出てきて面白い • この辺詳しくなりたければ競プロやるのが良さそう