큰 Ө 표기법은 정확히 무엇을 나타 냅니까?


179

빅 O, 빅 오메가 및 빅 세타 표기법의 차이점에 대해 정말 혼란 스럽습니다.

big O가 상한이고 big Omega가 하한이라는 것을 이해하지만 big Ө (theta)는 정확히 무엇을 나타 냅니까?

나는 그것이 꽉 묶인 것을 의미한다고 읽었 지만 그 의미는 무엇입니까?


답변:


93

이는 주어진 함수에서 알고리즘이 big-O 및 big-Omega임을 의미합니다.

이 경우 예를 들어 Ө(n), 다음 몇 가지 상수가 k같은 당신의,보다 큰 기능 (어떤 런타임) n*k충분히 큰에 대한 n, 그리고 몇몇 다른 상수 K함수가보다 작도록 n*K충분히 큰위한 n.

즉, 충분히 큰 n경우 두 개의 선형 함수 사이에 끼워집니다.

옵션 k < Kn충분히 큰n*k < f(n) < n*K


그 변수들은 약간 혼란스럽지 않으며 관련이 없습니다.
Aaron Robeson

@committedandroider 아니요, 소문자와 대문자가 다르기 때문에 두 가지 "유사한"(여기에서는 관련이 없지만) 변수가 크고 작은 대소 문자를 사용하는 전형적인 수학적 스타일을 사용하고 있습니다.
Santropedro

329

먼저 큰 O, 큰 Theta 및 큰 오메가가 무엇인지 이해합시다. 그것들은 모두 기능 세트 입니다.

Big O는 상한 점 바운드를 제공하는 반면 Big Omega는 하한값을 제공합니다. 빅 세타는 둘 다 제공합니다.

Ө(f(n))또한 모든 것이 O(f(n))있지만 다른 방법은 아닙니다. in 과 in에 모두
T(n)있다고합니다 . 세트의 용어로 는 IS 교차로Ө(f(n))O(f(n))Omega(f(n))
Ө(f(n))O(f(n))Omega(f(n))

예를 들어, 병합 정렬 최악의 경우는 둘 다 O(n*log(n))Omega(n*log(n))- 따라서도 Ө(n*log(n))하지만, 또한 O(n^2)이후, n^2그 이상의 점근 "더 큰"입니다. 그러나, 그것은 것입니다 하지 Ө(n^2) 알고리즘이 아니기 때문에 Omega(n^2).

좀 더 깊이있는 수학 설명

O(n)점근 적 상한입니다. 경우 T(n)이며 O(f(n)), 이것은 어느 의미에서 해당 n0상수가 C되도록 T(n) <= C * f(n). 한편, big-Omega는 ) C2와 같은 상수가 있다고 말합니다 T(n) >= C2 * f(n)).

혼동하지 마십시오!

최악, 최고 및 평균 사례 분석과 혼동하지 마십시오. 세 가지 (Omega, O, Theta) 표기법 모두 알고리즘의 최고, 최악 및 평균 사례 분석과 관련 이 없습니다 . 이들 각각은 각 분석에 적용될 수 있습니다.

일반적으로 알고리즘의 복잡성을 분석하는 데 사용합니다 (위의 병합 정렬 예와 같이). 우리가 "알고리즘 A"라고 말할 때 O(f(n)), 우리가 실제로 의미하는 것은 "최악의 1 가지 경우 분석 에서 알고리즘의 복잡성 은 O(f(n))"-의미입니다.-함수의 "유사한"(또는 공식적으로 나쁘지 않은) 스케일 f(n)입니다.

알고리즘의 점근 적 경계를 신경 쓰는 이유는 무엇입니까?

글쎄, 거기에는 많은 이유가 있지만, 가장 중요한 이유는 다음과 같습니다.

  1. 정확한 복잡도 함수 를 결정하는 것이 훨씬 어렵 기 때문에 이론적으로 충분히 유익한 big-O / big-theta 표기법을 "타협"합니다.
  2. 정확한 op 수는 플랫폼에 따라 다릅니다 . 예를 들어 16 개의 숫자로 구성된 벡터 (목록)가있는 경우입니다. 얼마나 많은 작전이 필요할까요? 대답은 다음과 같습니다. 일부 CPU는 벡터 추가를 허용하지만 다른 CPU는 그렇지 않으므로 구현과 시스템에 따라 대답이 다르므로 이는 바람직하지 않은 속성입니다. 그러나 big-O 표기법은 기계와 구현간에 훨씬 더 일정합니다.

이 문제를 설명하려면 다음 그래프를 살펴보십시오. 여기에 이미지 설명을 입력하십시오

f(n) = 2*n보다 "나쁘다"는 것이 분명하다 f(n) = n. 그러나 그 차이는 다른 기능과 크게 다르지 않습니다. 우리는 f(n)=logn다른 기능들보다 빠르게 낮아지고 다른 기능들보다 f(n) = n^2빠르게 높아지고 있음을 알 수 있습니다.
따라서 위의 이유 때문에 상수 요소 (그래프 예제에서 2 *)를 "무시"하고 big-O 표기법 만 사용합니다.

위의 예에서, f(n)=n, f(n)=2*nin O(n)및 in 둘 다에있을 Omega(n)것입니다 Theta(n).
반면에-에 f(n)=logn있을 것입니다 O(n)(보다 낫습니다 f(n)=n). 그러나 안에 있지 Omega(n)않을 것입니다 Theta(n).
비대칭 적으로 f(n)=n^2는 들어 있지만 Omega(n), 들어 있지 O(n)않으므로-또한 아닙니다 Theta(n).


1 항상 그런 것은 아니지만 일반적으로. 분석 클래스 (최악, 평균 및 최고)가 누락되면 실제로 최악의 경우를 의미 합니다.


4
@krishnaChandra : f(n) = n^2는 asymptotically 강력 n하며 따라서 Omega (n)입니다. 그러나 그것은 O (n)이 아닙니다 (큰 n값 때문에 c*n모든 것 보다 큽니다 n). 우리가 Theta (n)은 O (n)과 Omega (n)의 교차점이라고 말했기 때문에 O (n)이 아니기 때문에 Theta (n)도 될 수 없습니다.
amit

8
big-O 표기법이 알고리즘의 최고 / 최악의 경우 실행 시간과 어떻게 관련이 없는지 설명하는 것이 좋습니다. O (T (n))는 더 나쁜 경우 실행 시간을 의미하는 주제를 Google에 표시 할 때 나타나는 웹 사이트가 너무 많습니다.
Will Sewell

1
@almel 그것은 2 ^ n이 아니라 2 * n (2n, 2 배 n)입니다
amit

5
@VishalK 1. 빅 O는 것입니다 상단 으로 바인딩을 n이 무한대로 경향이있다. 2. n 은 무한대가 되기 때문에 오메가는 하한 입니다. 3. 세타는 n 이 무한대 인 경향이 있기 때문에 상한 및 하한 이다. 경계는 낮은 n 값 ( n0 미만)에 대해 유지되지 않기 때문에 모든 경계는 " n 이 무한대 인 경향이 있기 때문에 "만 유효합니다 . 경계는 모든 nn0 이지만 하위 차수가 우세한 n0 아래는 아닙니다 .
bain

1
@hey_you 다시 답을 읽으십시오. 큰 O, 세타, 오메가는 알고리즘이 아닌 함수를위한 것입니다. 병합 정렬은 Omega (n) 최악의 경우입니다. 또한 O (n ^ 2) 최상의 경우입니다. 또한 Theta (nlogn) 최악의 경우입니다. 기본적으로 각 분석 (최악 / 최고 / 평균 / ...)에 대해 복잡한 기능이 T_best(n), T_worst(n), T_average(n)있습니다. 그것들은 동일 할 필요는 없습니다 (대부분은 그렇지 않습니다). O / Omega / Theta는 독립적으로 적용 할 수 있습니다.
amit

14

쎄타 (N) : 기능 f(n)에 속하는 Theta(g(n))양의 상수가 존재한다면, c1그리고 c2그러한 f(n)사이에 개재 될 수 c1(g(n))c2(g(n)). 즉, 상한과 하한을 모두 제공합니다.

Theta (g (n)) = {f (n) : 양의 상수 c1, c2 및 n1이 존재하여 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) 모든 n> = n1}

우리가 말할 때 f(n)=c2(g(n))또는 f(n)=c1(g(n))그것은 무증상 꽉 묶인 것을 나타냅니다.

O (n) : 상한 만 제공 (단단하거나 단단하지 않을 수 있음)

O (g (n)) = {f (n) : 양의 상수 c와 n1이 존재하여 모든 n> = n1에 대해 0 <= f (n) <= cg (n)}

ex : 바운드 2*(n^2) = O(n^2)는 점진적으로 단단하지만 바운드 2*n = O(n^2)는 점근 적으로 단단하지 않습니다.

o (n) : 상한 만 제공 (엄밀한 경계는 아님)

O (n)과 o (n)의 주목할만한 차이는 f (n)은 모든 n> = n1에 대해 cg (n)보다 작지만 O (n)과 같지 않습니다.

: 2*n = o(n^2), 그러나2*(n^2) != o(n^2)


1
하한을 나타내는 큰 오메가에 대해서는 언급하지 않았습니다. 그렇지 않으면, 아주 좋은 첫 답변과 환영합니다!
bohney

1
나는 그가 Theta (n)의 정의를 짜는 방식을 좋아했습니다. 공감!
user720694


1

빅 세타 표기법 :

친구를 엉망으로 만들 수 없습니다!

양의 값을 갖는 함수 f (n)가 있고 g (n)이 양의 값을 갖는 인수 n을 취하면) (g (n))은 {f (n)으로 정의됩니다 : 모든 n에 대해 상수 c1, c2 및 n1이 있습니다 = n1}

여기서 c1 g (n) <= f (n) <= c2 g (n)

예를 들어 보자.

f (n) =이라고하자

g (n) =

c1 = 5 및 c2 = 8 및 n1 = 1

모든 표기법 중에서, ϴ 표기법은 함수의 성장률에 대한 최상의 직관을 제공합니다. 이는 상한과 하한을 각각 제공하는 big-oh 및 big-omega와 달리 빡빡한 경계를 제공하기 때문입니다.

ϴ은 g (n)이 f (n)에 가깝고, g (n)의 성장 속도는 가능한 f (n)의 성장 속도에 가깝다는 것을 알려줍니다.

더 나은 직관을 얻기 위해 이미지를 참조하십시오


0

우선 모든 이론

  1. 큰 O = 상한 O (n)

  2. 세타 = 주문 함수-세타 (n)

  3. 오메가 = Q- 표기 (하한) Q (n)

사람들이 왜 그렇게 혼란스러워 하는가?

많은 블로그와 서적에서이 진술이 강조되는 방식은 다음과 같습니다

"이것은 Big O (n ^ 3)"입니다.

사람들은 종종 날씨처럼 혼동합니다

O (n) == 세타 (n) == Q (n)

그러나 명심해야 할 것은 O, Theta 및 Omega라는 이름을 가진 수학적 기능이라는 것입니다

다항식의 일반식이 동일합니다.

허락하다,

f (n) = 2n4 + 100n2 + 10n + 50

g (n) = n4이므로 g (n)은 함수를 입력으로 받아 가장 큰 전력으로 변수를 반환하는 함수입니다.

아래의 모든 설명에 대해 동일한 f (n) 및 g (n)

Big O-기능 (상한을 제공함)

3n4> 2n4이므로 큰 O (n4) = 3n4

3n4는 f (x) = 3x와 마찬가지로 Big O (n4)의 값입니다.

n4 는 여기서 x 의 역할을 하고 있습니다.

n4를 x'so로 대체, Big O (x ') = 2x', 이제 우리는 행복합니다

따라서 0 ≤ f (n) ≤ O (x ')

O (x ') = cg (n) = 3n4

가치관,

0 ≤ 2n4 + 100n2 + 10n + 50 ≤ 3n4

3n4는 우리의 상한입니다

세타 (n)는 더 낮은 경계를 제공합니다

2n4 ≤ 우리의 예 f (n) 때문에 Theta (n4) = cg (n) = 2n4

2n4는 세타의 값입니다 (n4)

따라서 0 ≤ cg (n) ≤ f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4는 우리의 하한입니다

오메가 n-주문 기능

이것은 날씨 하한이 상한과 유사하다는 것을 알기 위해 계산됩니다.

사례 1). 상한은 하한과 유사

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

사례 2). 상단 바운드가 하단 바운드와 유사하지 않은 경우

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

이것이 설명되기를 바란다!!

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