O(log * N)とは何ですか?


80

O(log * N)とは何ですか?O(log N)とどう違うのですか?


同様の質問:stackoverflow.com/questions/2307283/…O(log* N)残念ながら回答はありません。
BalusC 2010年

1
この質問は、ログの後の*に関するものですか、それとも一般的なO()表記に関するものですか?
Bart van Heukelom 2010年

1
それはいくつかの高度なデータ構造にありますが、私はそれがどこから来たのか思い出せないほど長い間学校を休んでいます!
ラリー

1
私はちょうど思い出したので、進んでいないと思います-連合はそれはAが逆アッカーマン関数であるO(n)と、に低下するまでパス圧縮の初期下限はO(Nログ* n個)に設定されたとして下さい。..
ラリー・

1
ふふ。実際には、そのためのO(n)の見積もりには満足できると思います。:-)
RBarryYoung 2010年

回答:


84

O( log* N )反復対数」です:

コンピュータサイエンスでは、nの反復対数(log * n(通常は「ログスター」と読みます))は、結果が1以下になる前に対数関数を繰り返し適用する必要がある回数です。


9
それは私が聞いたことがない本当に面白いことです。Q + A + 1それぞれ。O(log * N)はすべての目的のためのO(1)だと思います。涼しい。
グレッグ

1
@ greg、log(n)がないということは、要素の数が増えるにつれて時間が遅くなることを意味します。例えば。要素の数が10倍になると、関数の所要時間は2倍になります
Martin Beckett 2010年

2
O( N log* N )改善される前のUnion-Findアルゴリズムの分析で最初に遭遇したと思いO( A N )ます。ここで、Aは逆アッカーマン関数です。私はまだ後者の証明を理解していませんが、O( N log* N )アルゴリズムは比較的良い読み物です。
ラリー

13
@Martinですが、これはlog *(n)であり、log *(2 ^ 65536 -1)= 5のように、非常にゆっくりと上昇します。この定数と呼ぶ方がよいでしょう。
グレッグ

4
申し訳ありませんが、ログスターの違いを理解していませんでした、ありがとう-何か新しいことを学びました!
マーティンベケット2010年

25

このlog* Nビットは反復アルゴリズムであり、成長が非常に遅く、単なるlog N。よりもはるかに遅くなります。基本的には、回答が1を下回るまで繰り返し「ログに記録」し続け(例:) log(log(log(...log(N)))、必要な回数がlog()回答になります。

とにかく、これはStackoverflowに関する5年前の質問ですが、コードはありませんか?(!)それを修正しましょう-再帰関数と反復関数の両方の実装です(どちらも同じ結果になります):

public double iteratedLogRecursive(double n, double b)
{
    if (n > 1.0) {
        return 1.0 + iteratedLogRecursive( Math.Log(n, b),b );
    }
    else return 0;
}

public int iteratedLogIterative(double n, double b)
{
    int count=0;
    while (n >= 1) {
        n = Math.Log(n,b);
        count++;
    }
    return count;
}

2
これはどのように質問に答えますか?
マローン2015年

3
@MarounMaroun:より多くのコンテキストを提供するために、回答の先頭を編集しました。コードは彼が求めていた説明/定義です。
ダンW

9

log *(n)- 「logStarn」として知られています、 "反復対数"

簡単に言えば、log *(n)= log(log(log(.....(log *(n))))と仮定できます。

log *(n)は非常に強力です。

例:

1) Log *(n)= 5ここで、n =宇宙の原子数

2) 3色を使用したツリーの色付けはlog *(n)で実行でき、ツリー2色の色付けで十分ですが、複雑さはO(n)になります。

3)ユークリッド最小全域木を知っている点のセットのドロネー三角形分割を見つける:ランダム化されたO(n log * n)時間。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.