2012-02-08 20 views
10

異なる複雑さで同じ結果を計算する2つのalgorthimがある場合、O(log n)は常により速くなりますか?もしそうなら、説明してください。これは割り当ての問題ではありません。O(log n)は常にO(n)よりも速いですか

+4

十分な大きさ* n *の方が常に高速です。 – Phonon

答えて

23

いいえ1つのアルゴリズムがN/100で実行され、もう1つのアルゴリズムが(log N)*100で実行される場合、2番目のアルゴリズムは入力サイズが小さいほど遅くなります。漸近的複雑さは、入力サイズが無限になるまでの実行時間の振る舞いに関するものです。

+0

したがって、O(n)は非常に小さい入力に対してO(log n)より速くなる可能性がありますか? – Varkolyn

+4

1 * nはO(n)です。 10000000000000000000000000000000 *(log n)はO(log n)です。そのような場合、O(n)は非常に小さい入力では高速になるだけではありません。しかし、 "n"が無限に近づくにつれて、* O *(log n)はより速くなります。 –

+0

@ヴァーコリン:必ずしも*極端に*。アルゴリズムに応じて、クロスポイントは* n *で非常に大きくなることがあります。 – kkm

12

いいえ、必ずしも高速であるとは限りません。しかし、問題のサイズが大きくなるにつれて、の最終的には、O(log n)アルゴリズムがO(n)より速い点に常に到達します。

通常、O(log n)アルゴリズムがO(n)アルゴリズムを追い越すポイントは、非常に迅速になります。 O(n)とO(n^2)の間に大きな違いがあるように、O(log n)とO(n)の間には大きな違いがあります。

あなたはジョン・ベントレーによってプログラミング真珠を読む機会を持っている場合は、そこに素晴らしい章彼はに可能なすべてをやって、O(n)のOに対するアルゴリズム(N^2)1ピットがありますO(n^2)に利点を与える。 (彼は、Alpha上でC言語でO(n^2)アルゴリズムをコーディングし、古いZ80などでは約1MHzでBASICを解釈するO(n)アルゴリズムをコーディングしています)アルゴリズムはO(n^2)を追い越します。

場合によっては、非常に複雑なアルゴリズムがありますが、複雑なアルゴリズムは、単純なものよりわずかに優れています。そのような場合、盲目的にアルゴリズムを選択しないでください。大規模な問題で高速に処理されることがあります。

関連する問題