web-dev-qa-db-ja.com

ログ機能の複雑さは何ですか?

log base 1関数の複雑さは何ですか?

27
Paul Manta

これは、対数を計算する値の定義域によって異なります。

IEEEダブルの場合、多くのプロセッサは1つのアセンブリ命令で対数を取ることができます。 x86には、たとえば、FYL2XおよびFYL2XP1命令があります。通常、このような命令は、ある固定ベースの対数のみを取りますが、次の事実を使用して、任意のベースの対数を取るために使用できます。

ログa b =ログc b /ログc A

2つの対数を取り、それらの商を見つけるだけです。

(任意の精度の)一般的な整数の場合、二分探索と組み合わせた繰り返し二乗を使用して、O(log log n)算術演算のみを使用して対数をとることができます(数値を2乗するたびに、指数を2倍にします。つまり、2乗しかできません。値を超えてバイナリ検索を実行できるようになるまでのn回のログログの数)。 フィボナッチ数を使用したいくつかのかわいいトリック を使用すると、O(log n)スペースでのみこれを実行できます。 2進対数 を計算している場合、ビットシフトで使用できるいくつかのかわいいトリックがあります(漸近的な複雑さは同じですが)。

任意の実数の場合、論理はより難しくなります。ニュートン法またはテイラー級数を使用して、特定の精度内で対数を計算できますが、これを行う方法に精通していないことを告白します。ただし、ほとんどの実数はIEEE倍であり、その場合はより優れたアルゴリズム(またはハードウェア命令)があるため、実際にこれを行う必要はほとんどありません。

お役に立てれば!

36
templatetypedef