二つのコードは小さなテストケースで同一の結果を生み出しながら、本物のデータが届くと全く異なる振る舞いをすることがあります。ビッグO記法は、コンピューター科学者がこの違いを正確に記述する方法です — 入力サイズが増加するにつれて操作の数がどう増加するかを数学的に記述するのです。
A-Level発展
「O」が本当に意味すること
ビッグOはアルゴリズムの成長率を記述します — 入力サイズ、伝統的にnと呼ばれるものが増加するにつれて操作の数がどう増加するか。それは意図的に定数因子と小さい項を無視します。なぜなら、それが答えようとしている問いは「これはどう成長するか」であり、その答えはあなたが実行しているコンピューターに依存しないからです。
本当に重要な成長率
データが増加するにつれて、最良から最悪まで、出会うほぼすべてのアルゴリズムを一握りの成長率がカバーします:
- O(1) — 定数。入力サイズにかかわらず同じ数のステップ。リストが空かどうかを確認するようなものです。
- O(log n) — 対数的。nが増加するにつれて操作は非常にゆっくり増加します — 例えば、ソートされたリストでの二分探索です。
- O(n) — 線形的。入力を倍にすれば、作業も倍になります — ソートされていないリストの各要素を一度ずつ通過するようなものです。
- O(n²) — 二次的。入力を倍にすれば、作業は四倍になります — 各要素を他のすべての要素と比較する典型的な例です。
小さいnではこれらの曲線は似て見えます — どのアルゴリズムが実際に現実世界のデータで生き残るかを決定する違いは、nが大きくなったときにしか現れません。そしてまさにこの領域を記述するよう設計されているのがビッグOなのです。
Try it yourself — drag the slider to change the input size (n), and watch how many operations each growth rate actually needs.
Input size: n = 10
At n = 10, an O(n²) approach needs 100 operations — 10× more than the O(n) approach doing the exact same job.
10要素に対して100回の操作を行う二次的なO(n²)アルゴリズムは、1000要素に対しては1,000,000回の操作を行います — 100倍のデータに対して100倍の作業ではなく、10,000倍の作業です。
試験形式の問題
あるアルゴリズムは、4個の項目に対して8回、8個の項目に対して32回、16個の項目に対して128回の操作を必要とする。その理由を示しながら、Big O成長率を決定しなさい。 [3点]
模範解答と採点基準を表示
- nが2倍になる連続したケースを比較する:4 → 8、そして8 → 16 (1点)
- 操作回数は毎回4倍になる:8 → 32(×4)、そして32 → 128(×4) (1点)
- nを2倍にすると操作回数が4倍になる(×4 = ×2²)場合、これは2次成長の特徴である:O(n²) (1点)
採点者が重視する点: 「数値が大きくなっている」という一般的な言い方だけでなく、nの倍増とその結果生じる操作数の倍率との間の具体的なパターンを特定すること — その比率(ここでは倍増ごとに×4)こそが、実際に成長率を特定するものであり、単なる生の数値ではない。
よくある間違い: 数字が「一貫して大きくなっている」というだけで線形成長だと仮定してしまうこと。O(n)(nの倍増ごとに×2)とO(n²)(倍増ごとに×4)を区別する倍増関係を確認しないこと。
なぜ成長率の違いが実践で重要なのか
小さなテストデータでは、O(n²)アルゴリズムとO(n log n)アルゴリズムはどちらも1秒の何分の一かで終わることがあります — 違いは目に見えません。同じ入力を本物の製品が実際に扱うサイズまで成長させると、O(n²)のアプローチは実際に何時間もかかる一方で、O(n log n)のアプローチは数秒しかかからないことがあります。
正しいコードを書くこと以上に重要な理由
どんなプログラマーでも正しい答えを生み出すコードを書くことができます。情報科学を、あなたやお子様が単なる構文ではなく、あるアプローチが別のアプローチより優れている理由を説明することで理解してほしいなら、それはまさに私たちのGCSEとA-Level情報科学の家庭教師が提供するものであり、完全な学習の道筋はこちらからご覧いただけます。
よくある質問
なぜ定数や小さい項を無視するのですか — それは有用な情報を失うことになりませんか?
ビッグOは特定の問いに答えるよう意図的に設計されています — 入力が非常に大きくなるにつれて実行時間はどう増加するか — そしてnが大きいほど、定数は問題になりません。ビッグOはパフォーマンスの全体像を語るものではありませんが、データが十分大きくなったときにどちらのアルゴリズムが勝つかを正しく予測します。
低いビッグOは実際には常に最良の選択ですか?
自動的にそうではありません — 小さい入力に対しては、より劣るビッグOだがはるかに小さい定数係数を持つアルゴリズムの方が実際には実践で速く実行されることがあります。なぜなら「より良い」アルゴリズムが勝ち始める交差点は、はるかに大きなnでしか到来しないかもしれないからです。
ビッグOは面接だけでなく、日常的にプログラマーによって実際にどう使われていますか?
これは開発者が、本物の(非常に大きな)データが届いたときに、あるアプローチがまだ機能するかどうかを予測する方法です。ソートされていないリストを検索するのはO(n)です。ソートされたリストでの二分探索はO(log n)です — 10要素では見えない違いですが、1000万要素では巨大な違いです。
読者からの評価とレビュー
この記事を複数の観点から評価してください — あなたの意見は他の読者の助けになり、私たちの改善にもつながります。
この記事は役に立ちましたか?
ご感想をお聞かせください — 修正点、未解決の疑問、次に取り上げてほしいトピックなど。
直接話したいですか? ご都合のよい時間に無料のビデオ通話を予約できます。短い質問は15分、その他は30分です。時間はお住まいのタイムゾーンで表示されます。

著者について
Sudershan Soni
Mostak Servicesの創業者兼主任講師 — 数学・理科・情報科学・STEMの修士号を持つ講師であり、20年以上のプロフェッショナルとしての経験を持ちます。11+やGCSEからA-Levelおよびそれ以降まで、世界中の生徒をオンラインで指導しています。
プロフィール全文を読む