[algorithm] O (log * N)는 무엇입니까?
O (log * N)는 무엇이며 O (log N)와 어떻게 다릅니 까?
답변
O( log* N )
” 반복 로그 “입니다.
컴퓨터 과학에서 n의 반복 로그, log * n (일반적으로 “log star”로 읽음)으로 기록되는 것은 결과가 1보다 작거나 같기 전에 로그 함수를 반복적으로 적용해야하는 횟수입니다.
답변
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;
}
답변
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) 시간을 알고있는 점 집합의 들로네 삼각 분할 찾기.