Big-O와 Little-O 표기법의 차이점


답변:


442

f ∈ O (g)는 본질적으로

들면 적어도 하나의 상수의 선택의 (K) > 0 인 경우 상수 찾을 수 예는 부등식 0은 <= F (X) <= kg (x)는 모든 X의 보유> 그렇게.

O (g)는이 조건이 유지하는 모든 함수의 집합입니다.

f ∈ o (g)는 본질적으로

들면 상수의 선택의 (K) > 0 인 경우 상수 찾을 수 예는 부등식 0 <= F (X) <kg (X)이 모두 x의 보유> 그렇게.

다시 한 번, o (g)는 세트입니다.

Big-O에서는 부등식이 최소 x 이상으로 유지되는 특정 승수 k 를 찾으면 됩니다.

Little-o에서는 음수가 아니거나 0이 아닌 한 k를 작게 만들더라도 부등식이 유지되는 최소 x 가 있어야합니다 .

이 두 가지 모두 상한을 설명하지만, 다소 반 직관적으로 Little-o가 더 강력합니다. f ∈ o (g) 인 경우 f ∈ O (g) 인 경우보다 f g o (g) 인 경우 f와 g의 성장률 사이에 훨씬 더 큰 차이가 있습니다.

시차의 한 가지 예는 다음과 같습니다. f ∈ O (f)는 true이지만 f ∈ o (f)는 false입니다. 따라서 Big-O는 "f means O (g)는 f의 점근 성장이 g보다 빠르지 않다는 것을 의미한다"는 반면 "f ∈ o (g)는 f의 점근 성장이 g보다 엄격히 느리다는 것을 의미합니다. <=vs와 같습니다 <.

보다 구체적으로, g (x)의 값이 f (x)의 상수 배수 인 경우, f ∈ O (g)는 참입니다. 이것이 big-O 표기법으로 작업 할 때 상수를 삭제할 수있는 이유입니다.

그러나 f ∈ o (g)가 true가 되려면 g 에 x 의 더 큰 거듭 제곱 이 포함 되어야합니다. 따라서 x가 커질수록 f (x)와 g (x) 사이의 상대적 분리가 실제로 커져야합니다.

알고리즘을 참조하지 않고 순수 수학 예제를 사용하려면 :

다음은 Big-O에 해당하지만 little-o를 사용한 경우에는 해당되지 않습니다.

  • x² ∈ O (x²)
  • x² ∈ O (x² + x)
  • x² ∈ O (200 * x²)

little-o의 경우 다음과 같습니다.

  • x² ∈ o (x³)
  • x² ∈ o (x!)
  • ln (x) ∈ o (x)

f ∈ o (g) 인 경우 f ∈ O (g)를 의미합니다. 예를 들어, x² ∈ O (x³)는 x² ∈ O (가 x³), (다시 같은 O의 생각도 마찬가지입니다, 그래서 <=같은 및 O <)


146
예, 차이점은 두 기능이 동일한 점에서 동일하다는 것입니다. 직관적으로 나는 big-O의 의미는 "보다 빨리 자라지 않는다"(즉, 같은 속도로 또는 느리게 자라다)와 little-o의 의미는 "보다 느리게 자라다"라는 것을 좋아한다.
Phil

12
이것을 위키 백과에 복사 하시겠습니까? 이것은 거기에있는 것보다 훨씬 낫습니다.
cloudsurfin

1
@SA 예. "높은 x의 거듭 제곱"에 대한 간단한 규칙을 적용 할 수없는 까다로운 사례입니다. 그러나 Strilanc의 답변에 주어진보다 엄격한 한계 정의를 보면 lim n-> inf (2 ^ n / 3 ^ n) = 0인지 알고 싶습니다. (2 ^ n / 3 ^ n) = (2/3) ^ n이고 0 <= x <1, lim n-> inf (x ^ n) = 0이므로 2 ^ n = o (3 ^ n)입니다.
Tyler McHenry

1
"Little-o에서는 음수가 아니거나 0이 아닌 한 k를 작게 만들더라도 불평등이 발생하는 최소 x가 있어야합니다." "모든 a것이있는 것은 아니다 k: ...", "모든 k것이있는 a것은 : ..."
GA1

1
"Little-o에서는 음수가 아니거나 0이 아닌 한 k를 작게 만들더라도 불평등이 최소 x를 유지해야합니다." 아니요, 이것은 올바르지 않습니다.
Filippo Costa

196

로 큰-O는 작은 - 오이다 이다 <. Big-O는 포괄적 인 상한이고 little-o는 엄격한 상한입니다.

예를 들어, 기능 f(n) = 3n은 다음과 같습니다.

  • 에서 O(n²), o(n²)그리고O(n)
  • 하지에서 O(lg n), o(lg n)또는o(n)

마찬가지로 숫자 1는 다음과 같습니다.

  • ≤ 2, < 2≤ 1
  • 아니 ≤ 0, < 0또는< 1

다음은 일반적인 아이디어를 보여주는 표입니다.

큰 오 테이블

(참고 : 테이블은 좋은 가이드 그러나 그것의 한계 정의는 측면에서해야 우수한 제한 대신 정상 한계의 예를 들어. 3 + (n mod 2) 3 영원히 4 사이의 진동이에 있어요. O(1)여전히 가지고 있기 때문에, 정상적인 한계를 가지고 있지에도 불구하고 a lim sup: 4.)

Big-O 표기법이 점근 비교로 변환되는 방식을 암기하는 것이 좋습니다. 비교는 기억하기 쉽지만 n O (1) = P 와 같은 것을 말할 수 없기 때문에 유연성이 떨어집니다 .


한 가지 질문이 있습니다 : 3 행과 4 행의 차이점은 무엇입니까 (한도 정의 열)? 4가 보유하고 있지만 (lim> 0) 3이 아닌 예를 하나 보여 주시겠습니까?
Masked Man

3
아, 알아 냈어 Big Omega는 lim> 0, Big Oh는 lim <무한대, Big Theta는 두 조건이 모두 유지되는 경우 0 <lim <무한대를 의미합니다.
Masked Man

f ∈ Ω (g)의 경우 무한대의 한계가> = 1로 평가되어서는 안됩니다. f ∈ O (g)와 유사하게, 1 = <c <∞?
user2963623

1
@ user2963623 아니요, 0과 1 사이의 값을 포함하여 엄격하게 0보다 큰 유한 값은 "동일 점근 복잡성이지만 다른 상수 요인"에 해당합니다. 1 미만의 값을 생략하면 점근 적 복잡성 공간이 아닌 상수 요인 공간이 잘립니다.
Craig Gidney

1
@ubadub 집합을 통해 지수 연산을 브로드 캐스트합니다. 느슨한 표기법입니다.
Craig Gidney

45

개념적으로 무언가를 파악할 수 없을 때 X를 사용 하는 이유 에 대해 생각 하는 것이 X를 이해하는 데 도움이된다는 것을 알게되었습니다.

[알고있는 것들] 알고리즘을 분류하는 일반적인 방법은 런타임에 의한 것이며, 알고리즘의 복잡성을 크게 언급함으로써 어느 것이 "더 나은"기능을 가장 잘 예측할 수 있는지, 어느 것이 "가장 작은"기능인지 O에서! 실제 세계에서도 O (N)는 O (N²)보다 "더 낫다".

O (N)에서 실행되는 알고리즘이 있다고 가정하겠습니다. 꽤 좋아요? 그러나 당신 (당신, 훌륭한 사람, 당신)은 O ( NloglogloglogN ) 에서 실행되는 알고리즘을 생각해 봅시다 . 예! 더 빠릅니다! 그러나 논문을 쓸 때 어리석은 글을 거듭 쓰는 느낌이들 것입니다. 그래서 당신은 그것을 한 번 쓰고, "이 논문에서, 나는 이전에 시간 O (N)에서 계산 가능한 알고리즘 X가 실제로 o (n)에서 계산 가능한 것임을 증명했습니다."

따라서 모든 사람들은 알고리즘이 더 빠르다는 것을 알고 있습니다. 이론적으로. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.