(これはより長い答えなので、要約の太字を読んでください)
あなたの例を取り上げて、私たちがしていることの背後にある目的を理解しながら、ステップバイステップで見ていきましょう。私たちはあなたの機能とそのBig Oh表記を見つけることの目標から始めます。
f(n) = 6n+4
まず、聞かせてO(g(n))
表記ビッグああも私たちが見つけようとしていますf(n)
。ビッグああの定義から、我々は見つける必要が簡略化され g(n)
、いくつかの定数が存在する場所c
とn0
場所c*g(n) >= f(n)
のすべてのために真であるn
S」よりも大きいですn0
。
まず、選択してみましょうg(n) = 6n + 4
(O(6n+4)
ビッグオハイオ州で得られる)。この場合、それはc = 1
すべての値が常に等しいn0
ため、Big Ohの定義からの数学的要件を満たします。g(n)
f(n)
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
この時点で、数学的要件を満たしました。 我々が停止した場合O(6n+4)
、これは何の書き込みよりも有用であることは明らかませんf(n)
ので、アルゴリズムの一般的な時間の複雑さを理解する:それはビッグああ表記の真の目的を逃します! したがって、次のステップである単純化に進みましょう。
まず、我々はアウト簡素化することができます6n
ので、ビッグああですかO(4)
?番号! (読者が理由を理解できない場合は、読者に運動をさせてください)
第二に、大王が4
そうであるように単純化することができO(6n)
ますか?はい! その場合、次のg(n) = 6n
ように:
c*g(n) >= f(n)
c*6n >= 6n + 4
この時点で、のc = 2
各増分について、左側が右側(6)よりも速く(12)増加するように選択しますn
。
2*6n >= 6n + 4
ここn0
で、上記の式がn
その値よりも大きいすべてに対して真である場合、正の値を見つける必要があります。左側が右側よりも速く増加していることは既にわかっているので、必要なことは1つの正解を見つけることだけです。したがって、n0 = 2
上記を真にするので、それはg(n)=6n
、またはO(6n)
の潜在的なBig Oh表記であることがわかりf(n)
ます。
さて、Big Ohがそうであるように単純化できますか?はい!6
O(n)
その場合、次のg(n) = n
ように:
c*g(n) >= f(n)
c*n >= 6n + 4
c = 7
左が右よりも速く増加するので、選んでみましょう。
7*n >= 6n + 4
以上のすべてn
の場合に上記が当てはまることがわかりn0 = 4
ます。したがって、O(n)
はの潜在的なBig Oh表記ですf(n)
。g(n)
もう単純化できますか?いや!
最後に、最も単純なBig Oh表記はであることがわかりました。f(n)
O(n)
なぜ私たちはこれらすべてを経験したのですか?ので、今私たちが知っていることは、f(n)
直線的であることのビッグああ表記は、線形複雑であるため、O(n)
。良いことは、時間の複雑さf(n)
を他のアルゴリズムと比較できるようになったことです! たとえば、私たちは今、それが知っているf(n)
機能に匹敵する時間が複雑でありh(n) = 123n + 72
、i(n) = n
、j(n) = .0002n + 1234
、など。上記で説明したのと同じ単純化プロセスを使用すると、それらはすべて線形の時間複雑性を持つためO(n)
です。
甘い!!!