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
나는 그것이 어디에서 왔는지 기억하기에는 너무 오랫동안 학교를 떠났지만 일부 고급 데이터 구조에 있습니다!
Larry

1
나는 그렇게 진보 된 것이 아니라고 생각합니다. 경로 압축의 초기 하한이있는 Union Find는 O (A n)로 낮아질 때까지 O (n log * n)로 설정되었습니다. 여기서 A는 역 Ackermann 함수입니다 ..
Larry

1
헤. 실제로 나는 그것에 대한 O (n)의 추정치에 만족할 것이라고 생각합니다. :-)
RBarryYoung 2010 년

답변:


84

O( log* N )" 반복 로그 "입니다.

컴퓨터 과학에서 n의 반복 로그, log * n (일반적으로 "log star"로 읽음)으로 기록되는 것은 결과가 1보다 작거나 같기 전에 로그 함수를 반복적으로 적용해야하는 횟수입니다.


9
제가 들어 보지 못한 정말 흥미로운 일입니다. Q + A 각각 +1. O (log * N)는 모든 의도와 목적을위한 O (1)라고 생각합니다. 멋있는.
Greg

1
@greg, no log (n)는 요소 수가 증가함에 따라 시간이 더 느리다는 것을 의미합니다. 예. 10 배 많은 요소로만 함수가 2 배 더 오래 걸립니다
Martin Beckett

2
나는 Union-Find 알고리즘의 분석에서 처음 발견했다고 생각 O( N log* N )합니다.으로 개선되기 전에 O( A N )A는 역 Ackermann 함수입니다. 나는 여전히 후자의 증명을 이해하지 못하지만 O( N log* N )알고리즘은 비교적 좋은 읽기입니다.
Larry

13
@Martin,하지만 이것은 log * (n)입니다. 이것은 log * (2 ^ 65536 -1) = 5와 같이 매우 느리게 올라갑니다.이 상수를 호출하는 것이 좋습니다.
Greg

4
로그 스타의 차이를 인식하지 못해 죄송합니다. 감사합니다. 새로운 것을 배우세요!
Martin Beckett

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
이것은 질문에 어떻게 대답합니까?
Maroun

3
@MarounMaroun : 더 많은 컨텍스트를 제공하기 위해 답변의 시작 부분을 편집했습니다. 코드는 그가 요청한 설명 / 정의입니다.
Dan W

9

log * (n)- "반복 로그" 로 알려진 "log Star n "

간단히 말해서 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.