増加の上界(upper bound)を表す記法はどれですか?
- ABig Omega
- BLittle omega
- CBig O
- DBig Theta
ヒントを表示
- 「高々」です。
- 誤答を 2 つ消しました。残りの 2 つのうち 1 つが正解です。
答えと解説を表示
これが答えになる理由
O は上界、Ω は下界、Θ はタイトな上下界(tight bound)を表します。
ヒントと解説つきの無料のアルゴリズムと計算量選択式練習問題。3 つのレベル:重要な用語と事実, 概念の応用, 事例と分析。
n が大きいとき、最も速く増加する計算量クラスはどれですか?
お見事です。次の問題はいかがですか?次の問題に進みますか? すべてのトピックで、毎日 5 問の新しい問題。
アルゴリズムは、問題を解く、正確な手順の有限なリストです。たとえばリストの並べ替えや、電話帳から名前を探すことなどです。
2 つのアルゴリズムが同じ問題を解いても、かかる時間が大きく違うことがあります。計算量は、入力が大きくなると仕事の量がどのように増えるかを表します。
入力の大きさを n と呼びます:並べ替える項目の数、リストの長さ、グラフの節点の数などです。
1000 ページの電話帳から名前を探す場合を考えましょう。すべてのページを読むと、最大 1000 ステップかかります。真ん中を開いて毎回半分にしていくと、約 10 ステップですみます。
時間計算量はステップ数を数えます。空間計算量は追加のメモリを数えます。どちらも n の関数として書きます。
通常は最悪の場合、つまり大きさ n のすべての入力のうち最も仕事が多い場合を見ます。ときには、平均の場合や最良の場合が問われることもあります。
答え: 4 秒. n を 2 倍にすると n² は 2² = 4 倍になるので、時間は約 1 秒から約 4 秒になります。2 秒は線形に増える場合の答え、8 秒は n³ の場合です。
ビッグオー記法は、大きな n で重要なものだけを残します。定数倍を捨て、最も速く増える項だけを残します。
n = 1000 のとき、n² の項は 3 000 000 ですが、5n は 5000 にすぎません。小さい項は合計をほとんど変えません。
次の階級が何度も出てきます。増加が遅いものから速いものの順です:
ビッグオーは上界です:仕事量は多くともこの速さでしか増えません。Ω(ビッグオメガ)は下界、Θ(シータ)は上界であり下界でもある厳密な界です。
ビッグオーでは、対数の底は関係ありません。底が異なる対数は、定数倍しか違わないからです。
答え: O(n²). n が大きいと n² の項が支配的になり、定数倍の 2 は捨てられます。O(n) は誤った項を残しており、O(2n²) は定数を捨て忘れています。
ほとんどすべての講義に出てくるアルゴリズムがいくつかあります。その計算量は事実として覚えましょう。
再帰関数は、より小さい入力で自分自身を呼び出し、直接答えられる基底ケースに達するまで続けます。その実行時間は漸化式で書きます:
知っておくべき設計の考え方が 3 つあります。分割統治法は、分割し、解き、併合します。貪欲法は、各ステップで局所的に最良の選択をします。動的計画法は、重なり合う部分問題の答えを記憶し、1 回だけ計算します。
答え: O(n²). ピボットが悪いと、毎回の分割で片側に n − 1 個の項目が残り、O(n²) になります。O(n log n) は平均の場合で、マージソートの最悪の場合でもあります。
コードの時間計算量を求めるには:
理論の問題では、まずそれが述べているアルゴリズムや考え方の名前を挙げ、次にその計算量と条件(整列済みの入力、非負の重み、重なり合う部分問題)を思い出します。
すべてのステップをたどりましょう。開く前に次のステップを予想してみましょう。
このコードの時間計算量はいくらか。for i = 1 to n: (j = 1; while j < n: j = j × 2)
n は、ループが数え上げる最大の数です。
i は 1 から n まで 1 ずつ増えるので、外側のループは n 回実行されます。
j は 1、2、4、8、… という値をとり、n に達すると止まります。k 回の後は j = 2k なので、ループは約 log₂ n 回で止まります。
内側のループは外側のループの中にあるので、回数は掛け算になります。
n = 1024 のとき、内側のループは log₂ 1024 = 10 回実行されるので、本体は 1024 · 10 = 10 240 回実行されます。これは n² = 1 048 576 よりずっと少ない回数です。
O(n log n)
答え: O(n). 順に続くループは足し算になります:n + n = 2n で、定数は捨てられるので O(n) です。O(n²) が正しいのは、一方のループがもう一方の中にある場合だけです。
P には、多項式時間で解ける問題が含まれます。NP には、解を多項式時間で検証できる問題が含まれます。P の問題はすべて NP にも含まれます。P = NP かどうかは、まだわかっていません。
増加の上界(upper bound)を表す記法はどれですか?
O は上界、Ω は下界、Θ はタイトな上下界(tight bound)を表します。
ソート済み配列で、両端から 1 つずつポインタを内側へ動かして、和が目標値になる 2 つの要素を探します。時間計算量は何ですか?
和が小さすぎれば左のポインタを右へ、大きすぎれば右のポインタを左へ動かすので、ステップは高々 n 回です。
シュトラッセンのアルゴリズムは、半分のサイズのブロックの再帰的な掛け算を 8 回ではなく 7 回にして行列を掛けます。実行時間は何ですか?
a = 7、b = 2 で、nlog₂ 7 が O(n²) の加算の作業量より支配的なので、約 n2.81 になります。
2 つのアルゴリズムが同じ問題を解いても、かかる時間が大きく違うことがあります。計算量は、入力が大きくなると仕事の量がどのように増えるかを表します。
入力の大きさを n と呼びます:並べ替える項目の数、リストの長さ、グラフの節点の数などです。
どの問題にも選択肢が 4 つあり、正解は 1 つだけです。 行き詰まったら、まず小さなヒントを開き、必要なときだけ詳しい解説を見ましょう。