異なる複雑さで同じ結果を計算する2つのアルゴリズムがある場合、O(log n)は常に高速になりますか?もしそうなら説明してください。ところでこれは課題です。
いいえ。1つのアルゴリズムがN/100
と他の(log N)*100
、2番目の入力は、入力サイズが小さいほど遅くなります。漸近的複雑性は、入力サイズが無限大になる実行時間の動作に関するものです。
いいえ、常に高速になるとは限りません。しかし、問題のサイズがどんどん大きくなると、最終的に O(log n)アルゴリズムがO(n)アルゴリズムよりも高速になるポイントに常に到達します。
実際の状況では、通常、O(log n)アルゴリズムがO(n)アルゴリズムを追い越すポイントが非常に速くなります。 O(n)とO(n ^ 2)の間に大きな違いがあるように、O(log n)とO(n)の間に大きな違いがあります。
Jon BentleyによるProgramming Pearlsを読む機会がある場合、O [n ^ 2に対してO(n)アルゴリズムを試す素晴らしい章があります。 )1つは、O(n ^ 2)に利点を与えるために可能なすべてのことを行います。 (彼は、AlphaのCでO(n ^ 2)アルゴリズムをコード化し、約1MHzで実行されている古いZ80か何かで解釈されたBASICのO(n)アルゴリズムをコード化しています。)高速にO(n)アルゴリズムがO(n ^ 2)アルゴリズムを追い越します。
ただし、単純なアルゴリズムよりもわずかに優れた複雑さの非常に複雑なアルゴリズムが見つかることもあります。このような場合は、big-Oが優れているアルゴリズムを盲目的に選択しないでください。非常に大きな問題の場合にのみ高速になる場合があります。
サイズnの入力の場合、O(n)のアルゴリズムはnに比例したステップを実行しますが、別のアルゴリズムO(log(n))おおよそlog(n)のステップを実行します。
明らかに、log(n)はnよりも小さいため、複雑さのアルゴリズムO(log(n))の方が優れています。