Chapter 1-1. Big-O 표기법
카테고리: Algorithm Lesson 2
인프런에 있는 Rookiss님의 강의 Part2: 자료구조와 알고리즘 를 듣고 정리한 필기입니다. 😀
🔔 Big-O 표기법
사용하는 이유
Big-O 표기법
- 알고리즘의 성능을 객관적으로 측정하기 위하여 사용.
- 단순히 실행 속도를 비교하는 것으로 알고리즘 성능을 측정하는건 컴퓨터 실행 환경에 따라 차이가 있기 때문에 별로 좋지 못하다.
- 입력이 적은 구간과 많은 구간에서 성능이 확연히 차이가 나는 경우도 있을 수 있다.
- 알고리즘의 성능을 객관적으로 측정하기 위하여 사용.
표기법
1단계 : 수행 연산의 개수를 대략적으로 판단
수행되는 연산의 개수를 대략적으로 판단한다.
- 어떤 연산이 1 개만 있다면
1 개
- 어떤 연산이 N 번 도는 for문 안에 있다면
N 개
- 어떤 연산이 N 번 도는 이중 for문 안에 있다면
N^2 개
2단계 : 대장만 남긴다.
public int Add(int N)
{
int sum = 0; // 1 번
for (int i = 0; i < N; i++) // N 번
sum += i;
for (int i = 0; i < 2 * N; i++) // 4 * N^2 번 ⭐⭐ 얘가 가장 영향력이 크다. N^2니까.
for (int j = 0; j < 2 * N; j++)
sum += 5;
sum += 1234567; // 1 번
return sum;
}
- 영향력이 가장 큰 대표적인 연산만 남긴다.
- O(1 + N + 4 * \(N^2\) + 1) = O(4 * \(N^2\))
- 가장 영향력이 큰 4 * \(N^2\) 번 연산만 남긴다.
- 상수는 무시한다.
- O(4 * \(N^2\)) = O(\(N^2\))
- 위 코드의 성능은 최종적으로 O(\(N^2\)) 라고 할 수 있다.
- cf) O는 Order Of라고 읽는다.
거시적인 관점에서 보면, N 이 무한으로 커지면 커질 수록 N 과 \(N^2\)의 차이는 매우 커지게 된다. 따라서 대표적인 연산만 남기고 더 작은 연산들은 무시하는 것.
- 이차함수가 일차함수보다 같은 N 이라도 이차 함수가 증가폭이 훨씬 더 크니까..!
크기 순서
N
은 데이터(입력)의 크기가 된다.O(1)
<O(logN)
<O(N)
<O(NlogN)
<O(N^2)
<O(2^N)
<O(N!)
- 👉 작을 수록 연산이 적게 걸린다는 것이니 가장 좋은 알고리즘이라는 뜻!
O(N)
까지는 보통 무리가 없다고 얘기한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기