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
38
アルゴリズムと計算量
kab0718
February 07, 2024
Tweet
Share
More Decks by kab0718
See All by kab0718
visxに触ってみた話
kab0718
0
220
お嬢様言葉
kab0718
0
96
アイドルとコミュニケーション
kab0718
0
23
ブラウザレンダリングについて(簡易版)
kab0718
0
50
コーディングで意識してること
kab0718
0
43
趣味とぷよぐらみんぐ
kab0718
0
210
SDLアプリコンテスト2019プレゼン資料
kab0718
0
55
近況報告
kab0718
0
1.3k
アイドル×アイドル
kab0718
0
140
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Automating Front-end Workflow
addyosmani
1370
200k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Typedesign – Prime Four
hannesfritz
42
2.8k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Bash Introduction
62gerente
615
210k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
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) 先頭から順に隣接する要素と比較して入れ替え 最後から二番目の要素まで上記繰り返し
最後に • 場面によって最適なアルゴリズムは異なる • 計算量はデータ構造(配列,連結リスト,ツリー...)でも変化する • アルゴリズム調べると色々な問題出てきて面白い • この辺詳しくなりたければ競プロやるのが良さそう