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
39
アルゴリズムと計算量
kab0718
February 07, 2024
Tweet
Share
More Decks by kab0718
See All by kab0718
visxに触ってみた話
kab0718
0
220
お嬢様言葉
kab0718
0
110
アイドルとコミュニケーション
kab0718
0
25
ブラウザレンダリングについて(簡易版)
kab0718
0
52
コーディングで意識してること
kab0718
0
44
趣味とぷよぐらみんぐ
kab0718
0
210
SDLアプリコンテスト2019プレゼン資料
kab0718
0
56
近況報告
kab0718
0
1.3k
アイドル×アイドル
kab0718
0
140
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
Speed Design
sergeychernyshev
32
1.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Producing Creativity
orderedlist
PRO
347
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
860
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Building Adaptive Systems
keathley
43
2.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
YesSQL, Process and Tooling at Scale
rocio
173
14k
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) 先頭から順に隣接する要素と比較して入れ替え 最後から二番目の要素まで上記繰り返し
最後に • 場面によって最適なアルゴリズムは異なる • 計算量はデータ構造(配列,連結リスト,ツリー...)でも変化する • アルゴリズム調べると色々な問題出てきて面白い • この辺詳しくなりたければ競プロやるのが良さそう