답변:
Big O 는 상한이고 Omega 는 하한입니다. Theta 는 Big O와 Omega를 모두 필요로하므로 타이트 바운드 (상한 및 하한 둘 다 여야 함)라고하는 이유 입니다.
예를 들어 알고리즘 Omega(n log n)
은 최소한 n log n
시간 이 걸리지 만 상한선은 없습니다. 알고리즘을 취하는 Theta(n log n)
것은 최소한 n log n
(Omega n log n) 이상 n log n
(Big O n log n) 이상 은 걸리지 않기 때문에 훨씬 우선적 입니다.
Θ 표기법 (세타 표기법)은 O 표기법 및 Ω 표기법 (오메가 표기법) 보다 정확하기 때문에 타이트 바운드라고합니다 .
내가 게으르다면 정렬 된 배열에 대한 이진 검색이 O (n 2 ), O (n 3 ) 및 O (2 n )라고 말할 수 있으며 모든 경우에 기술적으로 정확할 것입니다. O 표기법은 상한 만 지정 하고 이진 검색은 이러한 모든 함수에 의해 상한으로 한정 되어 있기 때문 입니다. 이러한 게으른 추정치는 쓸모 가 없습니다 .
Θ 표기법 은 O 표기법과 Ω 표기법 을 결합 하여이 문제를 해결합니다 . 이진 검색이 Θ (log n)이라고하면 더 정확한 정보를 얻을 수 있습니다. 그것은 알고리즘에 묶여 있음을 알려줍니다 모두 가 빠르거나 느린 진술보다 훨씬 결코 있도록, 주어진 함수에 의해 측면.
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case
-컴퓨터 세계의 대부분의 사람들은 모두가 주로 Big O의 복잡성에 대해서만 이야기하기 때문에 게으른 것 같습니다.
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case
누군가가 이것과 혼동하는 경우 : 점근 적으로 빡빡한 small-o 표기법이 아닌 그런 종류의 함수가 사용됩니다. 예 :-바운드 2n ^ 2 = O (n ^ 2)는 점근 적으로 빡빡하지만 바운드 2n = O (n ^ 2)는 그렇지 않습니다. 더 읽기 : stackoverflow.com/questions/1364444/…
만약 무언가가 있다면 있다고 O (F (N)) 수단 거기 있다는 K , g (n)이 되도록 F (N) ≤ kg (N) .
만약 무언가가 있다면 있다고 Ω (F (N)) 수단 거기 있다는 K , g (n)이 되도록 F (N) ≥ kg (N) .
그리고 당신과 함께 뭔가가있는 경우 O (F (N)) 와 Ω (F (N)) , 다음의 Θ (F (N)를 .
위키 백과 문서 의 경우 약간의 밀도, 괜찮은이다.
g
대신 라고 읽어야 f
하며 나머지는 그대로 둘 수 있습니다. 두 번째 줄도 마찬가지입니다. "If you have something that 's Ω (g (n))"이어야합니다. 다시 확인해 주시겠습니까?
점근 상한 은 입력 수에 따라 주어진 알고리즘이 최대 시간 동안 실행됨을 의미합니다.
정렬 알고리즘을 예로 들어 보겠습니다. 배열의 모든 요소가 내림차순이면 정렬하려면의 실행 시간이 걸리며 O(n)
상한 복잡성을 보여줍니다. 배열이 이미 정렬 된 경우 값은입니다 O(1)
.
일반적으로 O-notation
상한 복잡도에 사용됩니다.
점근 적 밀착 경계 (c 1 g (n) ≤ f (n) ≤ c 2 g (n))는 함수에 대한 평균 경계 복잡도를 표시하며 경계 한계 (상한과 하한) 사이의 값을 가지며, 여기서 c 1 과 c 2 는 상수입니다.
여기서 최소 시간 과 최대 시간 이라는 문구 는 약간 오해의 소지가 있습니다. Big O 표기법에 대해 이야기 할 때 우리가 관심을 갖는 실제 시간이 아니라 입력 크기가 커질 때 시간이 증가하는 방식입니다. 그리고 일반적으로 우리가 이야기하는 평균 또는 최악의 경우 시간이지 최선의 경우 가 아니라 일반적으로 문제를 해결하는 데 의미가 없습니다.
예를 들어 다른 질문에 대한 수락 된 답변에서 배열 검색을 사용하십시오. 크기 n 목록에서 특정 숫자를 찾는 데 걸리는 시간은 평균적으로 n / 2 * some_constant입니다. 함수로 취급하면 Charlie가 제공 한 의미에서 f(n) = n/2*some_constant
보다 빠르게 증가하지 않습니다 g(n) = n
. 또한 g(n)
어느 쪽 보다 느리게 증가하지 않습니다 . 따라서 g(n)
는 실제로 f(n)
Big-O 표기법에서 의 상한과 하한 모두 이므로 선형 검색의 복잡성은 정확히 n입니다 . 즉, Theta (n)입니다.
이와 관련하여 다른 질문에 대한 허용 된 답변의 설명은 완전히 정확하지 않습니다. 알고리즘이 일부 입력에 대해 일정한 시간으로 실행될 수 있기 때문에 O (n)이 상한이라고 주장합니다 (이는 위에서 언급 한 가장 좋은 경우입니다 . 이것은 우리가 러닝 타임에 대해 알고 싶은 것이 아닙니다.)
정확히 하한 또는 $ \ omega $ bfon f (n)는 점근 적으로 f (n)보다 작거나 같은 함수 집합을 의미합니다. 즉, U g (n) ≤ cf (n) $ \ 모든 $`un≥ n에 대해 '일부 c의 경우 n'$ \ in $ $ \ Bbb {N} $
그리고 f (n)의 상한 또는 $ \ mathit {O} $는 수학적으로 말하는 f (n)보다 어마 어마하게 크거나 같은 함수 집합을 의미합니다.
$ g (n) \ ge cf (n) \ 모든 n \ ge n '$, 일부 c, n'$ \ in $ $ \ Bbb {N} $.
이제 $ \ Theta $는 위에 쓰여진 두 개의 교차점입니다.
$\theta $
알고리즘이 "정확히 $ \ Omega \ left (f (n) \ right $"와 같으면 $ \ Theta \ left (f (n) \ right) $라고 말하는 것이 좋습니다.
또는 $
\omega $
가장 낮은 한계를 제공 하는 실제 속도를 제공 한다고 말할 수도 있습니다 .
기본 차이점
인용구
점근 상한 및 점근 적으로 타이트 Asym.upperbound는 입력 수에 따라 최대 시간으로 실행할 수있는 주어진 알고리즘을 의미합니다. 상한 복잡도를 나타내는 O (n)의 실행 시간이 걸리지 만 이미 정렬 된 경우 ohm (1)이 필요하므로 일반적으로 상한 복잡도에 "O"표기법을 사용했습니다.
Asym. tightbound bound는 for eg (c1g (n) <= f (n) <= c2g (n))는 함수가 두 경계 (상한 및 하한) 사이의 값을 갖도록 엄격한 경계 한계를 보여줍니다. 평균 사례.