큰 O 표기법에 관한 한 가지 측면에 대해 혼란 스럽기 때문에이 질문을하고 있습니다.
Frank Carrano의 Java 로 데이터 구조 및 추상화 책을 사용하고 있습니다. "알고리즘 효율성"장에서 다음 알고리즘을 보여줍니다.
int sum = 0, i = 1, j = 1
for (i = 1 to n) {
for (j = 1 to i)
sum = sum + 1
}
그는 처음에이 알고리즘을 (n 2 + n) / 2 의 성장률로 설명합니다 . 어느 것을 보면 직관적 인 것처럼 보입니다.
그러나, n 이 클 때 (n 2 + n) / 2 는 n 2 처럼 행동 한다고 명시되어있다 . 같은 단락에서 그는 (n 2 + n) / 2 도 n 2 / 2 와 매우 유사하게 동작 한다고 말합니다 . 그는 이것을 사용하여 위의 알고리즘을 O (n 2 ) 로 분류합니다 .
백분율 ( n) 은 n 이 거의 차이가 없기 때문에 (n 2 + n) / 2 는 n 2 / 2 와 유사 하다는 것을 알았습니다 . 내가 얻지 못하는 것은 n 이 클 때 (n 2 + n) / 2 와 n 2 가 비슷한 이유 입니다.
예를 들어, n = 1,000,000 인 경우 :
(n^2 + n) / 2 = 500000500000 (5.000005e+11)
(n^2) / 2 = 500000000000 (5e+11)
(n^2) = 1000000000000 (1e+12)
마지막 것은 전혀 비슷하지 않습니다. 사실, 그것은 분명히 중간 크기 의 두 배 입니다. Frank Carrano는 어떻게 비슷하다고 말할 수 있습니까? 또한 알고리즘은 O (n 2 ) 로 어떻게 분류됩니까 ? 그 내부 루프를 보면 그것이 n 2 + n / 2 라고 말할 것입니다.
n
'n ^ 2'함수와 함수가 모두 커짐에 따라 비슷하게 동작하므로 성장 속도에 지속적인 차이가 있다는 것입니다. 복잡한 표현이 있으면 더 빨리 자라는 기능이 지배적입니다.