質問

私の質問は、「ビッグOの平易な英語の説明」から生じます>。私は、対数複雑さのための正確な意味を知りません。私は時間との間の回帰と操作の数を作成し、X-乗値を計算し、その複雑さを決定することができることを知っています。しかし、私は紙の上ですぐにそれを決定するための方法を知りたい。

どのようにして、対数複雑さを決定するのですか?いくつかの良いベンチマークはありますか?

役に立ちましたか?

解決

これはあなたが何を意味するかですが、ルートに1つのノードが含まれてバランスの取れたバイナリツリーのようなスプレッドアウトデータ構造で作業しているとき...対数複雑さは通常2人の子供、発生し、4場合は、

わかりません各レベルで孫、8ひ孫など基本的にノードの数は、いくつかの因子によって乗算されます(2)が、これらのまだ唯一の反復に関与しています。あるいは別の例として、インデックスは各ステップで倍増したループ

for (int i = 1; i < N; i *= 2) { ... }

そのようなことは、対数複雑さの署名があります。

他のヒント

未厳しいが、それは、あなたは、本質的に、各繰り返しで半分に行われるために必要な作業を分割されたアルゴリズムを持っている、あなたは、対数の複雑さを持っています。古典的な例は、バイナリ検索です。

マスターの定理には通常に動作します。

あなたは自分のデータは、再発の半分各段階で切断されたときのために目を光らせて。、対数ビッグああ知りたい場合は、

あなたはその前のステップと同じ大き1/2であるデータを処理している場合、それは無限級数であるため、

このです。

ここでは、それを別の言い方である。

あなたのアルゴリズムは、問題の大きさの桁数で線形であると仮定します。だから、おそらくあなたは桁数に線形で示すことができるという、大きな数を因数分解するための新しいアルゴリズムを持っています。 20桁の数字は、それによってあなたのアルゴリズムを使用して、10桁の数字として考慮に二倍の時間がかかります。これは、ログの複雑さを持っているでしょう。 (そして、それは、発明者のために何か価値があるだろう。)

二分は、同じ動作を持っています。これは、2 ^ 20の係数だけ間隔を切断します= 2 ^ 10 1024倍だけ間隔の長さを切断するように略10二分のステップを取るが、唯一の20ステップ。

複雑さは常にアルゴリズムはすべての問題に高速であるという意味ではありませんログインしてください。 O(ログ(N))の前に線形係数は大きくてもよいです。だからあなたのアルゴリズムでは、問題の大きさは、他のアルゴリズムは、指数(または多項式)の死を死ぬことをかなり大きさになるまでに便利になってきていない、小さな問題にひどいかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top