[알고리즘] 빅 오 표기법 (Big-O notation)

[알고리즘] 빅 오 표기법 (Big-O notation)

Tags
Algorithm

빅 오 표기법 (Big-O notation)

개념

알고리즘의 효율성을 분석하는 표기법이다. 컴퓨터의 사양과 환경에 따라 실행 속도는 각각 다르기 때문에 빅오 표기법은 러프하게 알고리즘의 성능을 측정한다. 가장 큰 항을 살리고 그보다 작은 항, 계수, 상수는 모두 무시하며, 상수항만 있다면 O(1)로 표기한다. 시간을 측정하는 시간 복잡도(Time Complexity)와 메모리 사용을 측정하는 공간 복잡도(Space Complexity)가 있다. 알고리즘을 구현하기 전에 조건을 보고 시간 복잡도와 공간 복잡도를 예측하여 가능한 알고리즘을 미리 추측할 수 있다.

시간복잡도

  • 입력한 값 N에 따른 알고리즘의 최악의 경우 실행 시간을 나타낸다.

공간복잡도

  • 입력한 값 N에 따른 메모리 사용량을 나타낸다.
순위
명칭
O(1)
상수 시간
O(logN)
로그 시간
O(N)
선형 시간
O(N²)
차수 시간
O(2^N)
지수 시간
 
notion image

활용

💡
1초에 1억번 연산한다고 가정하고, N = 1000, 제한시간 2초, 메모리 제한 1.6MB 인 경우
시간복잡도
  • O(N³)의 시간복잡도를 가지는 알고리즘은 1,000,000,000회 (10억)
  • O(N²)의 시간복잡도를 가지는 알고리즘은 1,000,000회 (100만)
공간복잡도 (int형을 사용한다고 했을 때)
  • O(N)의 공간복잡도를 가지는 알고리즘은 4byte*1000 = 4KB
  • O(N²)의 공간복잡도를 가지는 알고리즘은 4byte*1000² = 4MB
1초에 1억 번 연산한다고 가정하면, 2초는 2억 회의 연산을 할 수 있으므로 2억 회 이하의 연산 횟수로 제한해야 한다.
따라서 O(N²) 이하의 시간 복잡도와 O(N) 이하의 공간 복잡도를 가지는 알고리즘을 사용해야 한다.