回答:
厳密な証明が必要な場合は、次の補題が役立つことがよくあります。定義よりも便利です。
もしが存在する、次いで
- 、
- および
- 。
これにより、アルゴリズム分析で登場するほとんどの機能を注文できるようになります¹。演習として、それを証明してください!
もちろん、それに応じて制限を計算できる必要があります。複雑な機能を基本的な機能に分解するための便利なトリックは次のとおりです。
より一般的には、次のように商を書き直すことができるように、凸で連続的に微分可能で厳密に増加する関数がある場合
、
と
、
それから
。
このルールの厳密な証明については、こちらをご覧ください(ドイツ語)。
実数に対する関数の継続を検討してください。L'Hôpitalのルールを使用できるようになりました。その条件²に注意してください!
階乗がポップアップしたら、スターリングの式を使用します:
また、一度証明した基本的な関係のプールを保持し、次のように頻繁に使用すると便利です。
対数は多項式よりも遅くなります、すなわち
α 、β > 0すべてについて。
多項式の次数:
α<βすべてについて。
多項式は指数関数よりも遅くなります:
αC>1すべてについておよび。
制限が存在しないため、上記の補題が適用されない場合があります(関数が発振する場合など)。この場合、limes Superior / Inferorを使用して、Landauクラスの次の特性化を検討してください。
我々は
- および
- 。
我々は
- および
- 。
さらに、
- および
- 。
あなたが私の表記に混乱している場合は、こことここをチェックしてください。
¹Nota bene:私の同僚は、多くの関数に対してこれを成功させるMathematica関数を書いたので、補題は本当にタスクを機械的計算に減らします。
²こちらもご覧ください。
Limit[f[n]/g[n], n -> Infinity]
ケースの区別を計算して実行します。
ヒント:Wolfram Alphaのようなものを使用してこれらの関数のグラフを作成し、それらがどのように成長するかを感じてください。これはあまり正確ではありませんが、十分な数を試してみると、成長の比較パターンが表示されるはずです。もちろんこれは証明に代わるものではありません。
たとえば、1から10000までlog(log(n))をプロットするか、個々のグラフを表示するlog(log(n))をプロットし、1から10000までlog(n)をプロットして比較します。