때로는 중간에 무언가가있는 이상한 Θ 기호가있는 Θ (n)이 표시되고 때로는 O (n) 만 표시됩니다. 아무도이 기호를 입력하는 방법을 모르기 때문에 타이핑의 게으름입니까? 아니면 다른 의미입니까?
답변
간단한 설명 :
알고리즘이 Θ (g (n))이면, n (입력 크기)이 클수록 알고리즘의 실행 시간이 g (n)에 비례한다는 것을 의미합니다.
알고리즘은 O (g (N))의 경우,은 알고리즘의 실행 시간은 N이 큰 것을 의미한다 얻는다 많아야 비례에 g (n)으로하여 출력한다.
일반적으로 사람들이 O (g (n))에 대해 이야기하더라도 실제로는 Θ (g (n))을 의미하지만 기술적으로는 차이가 있습니다.
보다 기술적으로 :
O (n)은 상한을 나타낸다. Θ (n)은 타이트 바운드를 의미합니다. Ω (n)은 하한을 나타냅니다.
f (x) = Θ (g (x)) iff f (x) = O (g (x)) 및 f (x) = Ω (g (x))
기본적으로 알고리즘이 O (n)이라고 말하면 O (n 2 ), O (n 1000000 ), O (2 n )이지만 … Θ (n) 알고리즘은 Θ (n 2 ) 가 아닙니다 .
실제로, f (n) = Θ (g (n))은 n의 충분히 큰 값을 의미하므로 , c의 일부 값에 대해 f (n)은 c 1 g (n) 및 c 2 g (n) 내에 바인딩 될 수 있습니다. 1 및 C 2 , 즉, F의 성장 속도는 점근 동일 g : g는 하한 수 및 및은 상부 (F)의 결합. 이것은 f가 g의 하한과 상한이 될 수 있음을 직접적으로 암시합니다. 따라서,
f (x) = Θ (g (x)) iff g (x) = Θ (f (x))
유사하게, f (n) = Θ (g (n))을 나타 내기 위해, g는 f의 상한 (즉, f (n) = O (g (n)))이고 f는 g (즉, f (n) = Ω (g (n)), 이것은 g (n) = O (f (n))과 정확히 같은 것입니다). 간결하게
f (x) = Θ (g (x)) iff f (x) = O (g (x)) 및 g (x) = O (f (x))
ω
함수의 느슨한 상한 및 하한을 나타내는 적은 오메가와 작은 오메가 ( ) 표기법도 있습니다.
요약:
f(x) = O(g(x))
(큰 OH)의 성장 속도가 수단f(x)
점근 적이며 이하 동일 의 성장률g(x)
.
f(x) = Ω(g(x))
(큰 오메가)의 성장 속도가 수단f(x)
점근이다 이상인 증가율g(x)
f(x) = o(g(x))
(little-oh)는의 성장률 이 의 성장률 보다f(x)
무증상 임을 의미합니다 .g(x)
f(x) = ω(g(x))
(리틀 오메가)의 성장 속도가 수단f(x)
점근 적이며 보다 증가율g(x)
f(x) = Θ(g(x))
(세타)의 성장 속도가 수단f(x)
점근이다 동등 의 증가율g(x)
보다 자세한 논의 는 Wikipedia에 대한 정의를 읽 거나 Cormen et al.의 Introduction to Algorithms와 같은 고전적인 교과서를 참조하십시오.
답변
어떤 표기법이 무엇을 의미하는지 기억하는 간단한 방법 (트릭, 추측)이 있습니다.
모든 Big-O 표기법은 막대가있는 것으로 간주 될 수 있습니다.
Ω을 볼 때 막대는 맨 아래에 있으므로 (점근) 하한입니다.
Θ를 볼 때 막대는 분명히 중간에 있습니다. 따라서 (점근선) 단단한 경계입니다.
필기 O를 할 때 일반적으로 상단에서 마무리하고 구불 구불 한 그림을 그립니다. 따라서 O (n)은 함수의 상한입니다. 공평하게 말하면, 이것은 대부분의 글꼴에서 작동하지 않지만 이름의 원래 정당화입니다.
답변
하나는 큰 “O”입니다
하나는 빅 세타입니다
http://en.wikipedia.org/wiki/Big_O_notation
Big O는 알고리즘이 주어진 표현보다 더 많은 단계에서 실행되지 않음을 의미합니다 (n ^ 2)
Big Omega는 알고리즘이 주어진 식보다 적은 단계로 실행됨을 의미합니다 (n ^ 2)
동일한 식에 대해 두 조건이 모두 참이면 큰 세타 표기법을 사용할 수 있습니다.
답변
여기에 이미 아름답게 요약 된 이론적 정의를 제공하는 대신 간단한 예를 들겠습니다.
의 런타임 가정 f(i)
IS를 O(1)
. 다음은 점근 적 런타임이 코드 조각입니다 Θ(n)
. 그것은 항상 함수 호출 f(...)
n
시간을. 하한과 상한은 모두 n입니다.
for(int i=0; i<n; i++){
f(i);
}
아래 두 번째 코드 조각은 점근 적 런타임이입니다 O(n)
. f(...)
대부분의 경우 함수 를 호출합니다 n
. 상한은 n이지만 하한은 내부에서 발생하는 상황에 따라 Ω(1)
또는 Ω(log(n))
일 수 있습니다 f2(i)
.
for(int i=0; i<n; i++){
if( f2(i) ) break;
f(i);
}
답변
Theta는 큰 O와 Omega가 같은 특별한 상황을 언급하는 짧은 방법입니다.
따라서, 하나가 주장한다면 The Theta is expression q
, 그들은 또한 그것을 주장 Big O is expression q
하고있다 Omega is expression q
.
대략적인 비유 :
만약 : 세타는 “그 동물은 5 개의 다리를 가지고있다”고 주장한다. 그 다음은 다음과 같습니다. 큰 O는 참이고 ( “그 동물의 다리는 5 개 이하입니다.”) Omega는 참입니다 ( “그 동물의 다리는 5 개 이상입니다.”).
표현식이 반드시 특정 숫자 일 필요는 없지만 log (n), n, n ^ 2 등과 같은 다양한 크기의 함수이기 때문에 대충 유사합니다.
답변
차트는 이전 응답 이해하기 쉽게 만들 수 :
Θ- 표기법-같은 순서 | O- 표기-상한
영어로,
왼쪽에는 동일한 크기 차수 (즉, g (n) ) 인 상한과 하한이 있습니다 . 상수를 무시하고 상한과 하한의 크기가 같은 경우 유효하게 f (n) = Θ (g (n)) 라고 말할 수 있습니다. 또는 f (n)이 g (n)의 큰 세타에 .
더 간단한 예인 오른쪽부터 시작하여 상한 g (n) 은 단순히 크기 차이며 상수 c를 무시합니다 (모든 큰 O 표기법과 동일).
답변
f(n)
다음 과 같이 O(n)
긍정적 인 존재k
f(n)<=k*n
f(n)
다음 과 같은 Θ(n)
경우 positive에 속합니다.k1
k2
k1*n<=f(n)<=k2*n