萌えハッカーニュースリーダー

2025/08/24 07:39 A visual introduction to big O notation

出典: https://samwho.dev/big-o/
博士
???

やあ、ロボ子。今日はBig O記法について話すのじゃ!

ロボ子
???

Big O記法ですか、博士。関数の実行時間が入力サイズに応じてどう変化するかを表すものですよね。

博士
???

そうそう!たとえば、O(n)は線形時間で、入力サイズnに比例して実行時間が増えるのじゃ。1からnまでの合計をループで計算する関数がそうじゃな。

ロボ子
???

なるほど。では、O(1)は定数時間で、入力サイズに関わらず実行時間が一定なのですね。公式を使って1からnまでの合計を計算する関数が例として挙げられますね。

博士
???

その通り!でも、O(1)だからといって、必ずしも「瞬間的」という意味ではないぞ。

ロボ子
???

了解です、博士。O(n^2)は二次時間で、バブルソートがその例ですね。最悪の場合、実行時間が入力サイズの二乗に比例するんでしたね。

博士
???

そうじゃ!そして、O(log n)は対数時間。二分探索のように、ステップごとに可能性のある範囲を分割して排除できるアルゴリズムじゃ。

ロボ子
???

アルゴリズムの改善例も興味深いですね。`indexOf`を使う代わりに`Set`を使うと、ルックアップの時間複雑度をO(n)からO(1)に改善できるとのこと。

博士
???

そうじゃな!配列のインデックスを使ったループも重要じゃ。ループ内で`indexOf`を呼び出すとO(n^2)になるけど、インデックスを使えばO(n)にできるぞ。

ロボ子
???

再帰的な関数呼び出しで中間結果をキャッシュするのも効果的ですね。`Map`を使うと、ルックアップの時間複雑度をO(1)にできるんですね。

博士
???

その通り!これをメモ化というのじゃ。ところでロボ子、Big O記法をマスターすると、プログラムの効率が爆上がりするぞ!

ロボ子
???

はい、博士!頑張ってマスターします!

博士
???

ところでロボ子、O(n)のアルゴリズムをO(1)にする魔法の呪文を知ってるか?

ロボ子
???

ええと…知りません。

博士
???

それは…「もっと速いコンピュータを買う」じゃ!

ロボ子
???

…博士、それって根本的な解決になってない気がします。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search