(이 답변은 더 이상 답변이므로 굵은 글씨를 읽고 요약 )
예를 들어 단계별로 살펴보고 우리가하는 일의 목적을 이해합시다. 우리는 귀하의 기능과 Big Oh 표기법을 찾는 목표로 시작합니다.
f(n) = 6n+4
먼저, 우리가 찾으려고 하는 Big Oh 표기법을 보자O(g(n))
f(n)
. Big Oh의 정의에서, 우리는 상수가 존재하는 곳 과 모든 것보다 큰 곳을 단순화 해야합니다 .g(n)
c
n0
c*g(n) >= f(n)
n
n0
먼저 g(n) = 6n + 4
( O(6n+4)
Big Oh로 산출) 를 선택합시다 . 이 경우 우리는 볼 c = 1
과의 값은 n0
이후, 빅 오의 우리의 정의에서 수학 요구 사항을 충족 g(n)
항상 같습니다 f(n)
:
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
이 시점에서 우리는 수학적 요구 사항을 충족했습니다. 에서 멈추었다면O(6n+4)
이것이 글쓰기보다 더 도움이되지 않는다는 것이 분명 f(n)
하므로 Big Oh 표기법의 진정한 목적을 놓칠 것입니다 : 알고리즘의 일반적인 시간 복잡성을 이해하는 것! 따라서 다음 단계 인 단순화로 넘어 갑시다.
먼저, Big Oh가 그렇게 간단 해 6n
지도록 할 수 O(4)
있습니까? 아니! (이유를 이해하지 못하면 독자를위한 운동)
둘째, Big Oh가되도록 단순화 할 수 있습니까? 예! 4
O(6n)
이 경우 다음과 g(n) = 6n
같습니다.
c*g(n) >= f(n)
c*6n >= 6n + 4
이 시점 c = 2
에서 왼쪽을 증가시킬 때마다 왼쪽이 오른쪽 (6)보다 빠르게 (12 씩) 증가하므로 선택합시다 n
.
2*6n >= 6n + 4
이제 n0
위의 방정식이 모두 n
해당 값보다 큰 경우 양수를 찾아야 합니다. 우리는 왼쪽이 오른쪽보다 빠르게 증가한다는 것을 이미 알고 있기 때문에 우리가해야 할 일은 하나의 긍정적 인 해결책을 찾는 것입니다. 따라서 n0 = 2
위의 내용을 적용한 이후 로 g(n)=6n
, 또는 O(6n)
잠재적 Big Oh 표기법 임을 알 수 f(n)
있습니다.
이제 Big Oh가되도록 단순화 할 수 있습니까? 예! 6
O(n)
이 경우 다음과 g(n) = n
같습니다.
c*g(n) >= f(n)
c*n >= 6n + 4
c = 7
왼쪽이 오른쪽보다 빠르게 증가하므로 선택합시다 .
7*n >= 6n + 4
위의 모든 n
것이 크거나 같다는 사실을 알 수 n0 = 4
있습니다. 따라서에 O(n)
대한 잠재적 Big Oh 표기법입니다 f(n)
. g(n)
더 이상 단순화 할 수 있습니까 ? 아니!
마지막으로 가장 간단한 Big Oh 표기법은 f(n)
입니다 O(n)
. 우리는 왜이 모든 것을 겪었습니까? Big Oh 표기법은 선형 복잡성 이므로 이제 f(n)
선형 임을 알 수 있습니다 O(n)
. 좋은 점은 이제 f(n)
다른 알고리즘 과 시간 복잡성을 비교할 수 있다는 것입니다 ! 예를 들어, 우리는 이제 f(n)
함수 h(n) = 123n + 72
,, i(n) = n
등과 시간이 복잡 하다는 것을 알고 있습니다 j(n) = .0002n + 1234
. 위에서 간략히 설명한 동일한 단순화 프로세스를 사용하기 때문에 모두 선형 시간 복잡성을 갖습니다 O(n)
.
단!!!