概要
概要
計算量は、プログラムの大変さを表す目安です。まずは『Big-O は計算量を書くための記号』だと捉えれば十分です。
What Is Complexity
計算量は「大変さ」の目安
計算量とは、そのプログラムがどれくらいたくさん仕事をするかを表す目安です。
ここでいう仕事とは、たとえば『何回比べるか』『何回探すか』『何回入れ替えるか』のような回数のことです。
つまり計算量は、プログラムの速さを直接書くというより、『仕事量がどう増えるか』を見るためのものです。
Big-O
Big-O は計算量を書くための記号
Big-O は、計算量を書くときによく使う記号です。O(n) や O(n²) のように書きます。
大切なのは、Big-O 自体がアルゴリズムの名前ではなく、『計算量を表す書き方』だということです。
最初は『データが増えたとき、仕事量がどんなふうに増えるかを書く記号』と考えれば十分です。
Why Growth Matters
なぜ「増え方」を見るのか
10件のデータでは、どの方法もすぐ終わるように見えることがあります。
でも 1000件、10000件と増えていくと、方法によって仕事量の増え方に大きな差が出ます。
その差を見るために、計算量では『今どれくらい速いか』より『増えたときにどうなるか』を重視します。
Concrete Examples
よく出る3つの形
候補を半分ずつ減らす形です。データが増えても、仕事量は少しずつしか増えません。
1つずつ順に見る形です。データが2倍になると、仕事量もだいたい2倍になります。
全体を何度も見比べる形です。データが増えると、仕事量が急に大きくなります。
How To Read
O(n) や O(n²) はどういう意味?
データが増えても、仕事量がほとんど増えない。
データが2倍なら、仕事量もだいたい2倍。
データが2倍になると、仕事量は4倍くらい。
Important Note
今速く見えても油断しない
10件や20件くらいの小さいデータでは、O(n) と O(n²) の差があまり目立たないことがあります。
だから、小さいデータでたまたま速く見えたとしても、それだけで良い方法だと決めないことが大切です。
データが増えたときにどうなるかまで見て、はじめて方法の違いがわかります。
Common Mistakes
初学者が誤解しやすい点
- O(n²) は『n² 秒かかる』という意味ではない
- 今の入力で速かったことと、大きい入力でも強いことは別
- Big-O は便利だが、平均ケースや定数倍を完全に無視してよいわけではない
- アルゴリズムによっては最良・平均・最悪を分けて考える必要がある