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
0
45
アルゴリズムと計算量
kab0718
February 07, 2024
Tweet
Share
More Decks by kab0718
See All by kab0718
visxに触ってみた話
kab0718
0
230
お嬢様言葉
kab0718
0
130
アイドルとコミュニケーション
kab0718
0
26
ブラウザレンダリングについて(簡易版)
kab0718
0
59
コーディングで意識してること
kab0718
0
49
趣味とぷよぐらみんぐ
kab0718
0
220
SDLアプリコンテスト2019プレゼン資料
kab0718
0
56
近況報告
kab0718
0
1.3k
アイドル×アイドル
kab0718
0
150
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
43
Automating Front-end Workflow
addyosmani
1371
200k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
110
The Curious Case for Waylosing
cassininazir
0
200
A better future with KSS
kneath
240
18k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
AI: The stuff that nobody shows you
jnunemaker
PRO
1
150
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
54
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) 先頭から順に隣接する要素と比較して入れ替え 最後から二番目の要素まで上記繰り返し
最後に • 場面によって最適なアルゴリズムは異なる • 計算量はデータ構造(配列,連結リスト,ツリー...)でも変化する • アルゴリズム調べると色々な問題出てきて面白い • この辺詳しくなりたければ競プロやるのが良さそう