강의보고 공부한 것을 정리하는 목적으로 작성된 글이므로 틀린점이 있을 수 있음에 양해부탁드립니다. (피드백 환영입니다)
두 알고리즘 A와 B를 비교하려면?
그래서 우리는 대안으로 Big-O 표기법
을 사용한다.
O(1)
은
int a = 0;
a += 1;
O(N + 1)
은
int a = 0;
for(int i = 0; i < N; i++)
a += 1;
O(N^2 + 1)
은
int a = 0;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
a += i;
이라고 볼 수 있다.
규칙
int a = 0;
for(int i = 0; i < N; i++)
a += 1;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
a += i;
a += 1;
이런 코드가 있다면
O(1 + N + 2 N^2 + 1)
= O(2 N^2)
= O(N^2) 이라고 볼 수 있다.
여기서 O는 Order Of라고 읽는다.
그래서 위 코드는 시간복잡도가 N^2이라고 볼 수 있다.
다양한 상황(재귀함수, 반복문안에서 함수 호출 등)이 많지만 결국 프로그래밍의 속도는 반복문에서 결정된다는 것이기 때문에 반복문을 사용할 때 주의를 해야한다.