私の見解: 最初のものについては、時間の複雑さの平均的なケースと最悪のケースの形だと思います。私は正しいですか?そして、他に何を書きますか?
いいえ!Big O表記は、平均的なケースまたは最悪のケースとは何の関係もありません。関数の成長の順序、特に、関数が別の関数と比較してどれだけ速く成長するかについてのみです。関数f
はO(n)
、平均的な場合とO(n^2)
最悪の場合があります。これは、関数がその入力に応じて異なる動作をすることを意味するだけなので、2 つのケースを別々に考慮する必要があります。
質問 2 に関しては、質問の文言から、Big O の数学的定義から始める必要があることは明らかです。完全を期すために、それは次のとおりです。
正式な定義: f(n) = O(g(n)) は、すべての n ≥ k に対して 0 ≤ f(n) ≤ cg(n) となる正の定数 c および k があることを意味します。関数 f の c と k の値は固定である必要があり、n に依存してはなりません。
(ソースhttp://www.itl.nist.gov/div897/sqg/dads/HTML/bigOnotation.html )
したがって、この定義に基づいて、 を示す数学的証明を作成する必要がありますf(n) = O(k(n))
。上記の定義O(g(n))
を withに置き換えることから始めます。O(k*f(n))
残りは非常に簡単です。