알고리즘. 시간복잡도와 Big-O 표기법 알아보기

1 분 소요

🌟 Big-O 표기법Permalink

알고리즘의 복잡도에는 시간 복잡도와 공간 복잡도가 있다.

시간 복잡도는 문제를 해결하는데 걸리는 시간과 입력의 함수 관계고, 공간 복잡도는 메모리 크기다. 알고리즘에서는 시간 복잡도가 더 중요!

이때 시간 복잡도를 나타내는 방법으로 Big-O 표기법을 사용한다.

빅 오 표기법은 최악의 실행 시간을 표기하고, 다른 표기법으로는 최상의 실행 시간을 표기하는 Big-Ω 빅 오메가 표기법, 평균 실행 시간을 표기하는 Big-θ 빅 세타 표기법이 있다.

가장 사용하기 편한 게 빅 오 표기법이라 빅 오 표기법으로 시간 복잡도를 나타낸다.

🌟 시간 복잡도Permalink

Big-O 표기법으로 나타내는 방법

O(1)Permalink

printf("Hello, World");

int arr[] = {1, 2, 3};
printf(arr[0]);

값이 크거나 작아도 즉시 출력할 수 있으므로 이런 건 O(1)의 시간 복잡도를 가진다.

O(N)Permalink

for(int i = 0; i < n; i++)
{
    //...
}

이런 건 n의 크기에 따라 실행 시간이 증가해서 O(N)이라고 표기한다.

O(N^2)Permalink

for(int i = 0; i < n; i++)
{
    for(int j = 0; j < m; j++)
    {
        //...
    }
}

이건 반복문이 두 번 있는 경우!

O(log n) O(n log n)Permalink

이건 입력 크기에 따라 처리 시간이 증가하는 정렬 알고리즘에서 많이 사용된다고 함!

O(2n)Permalink

이건 기하급수적 복잡도라고 불리며, 가장 느린 시간을 나타낸다. 피보나치 수열이 이 시간 족잡도를 가지고 있으며, 뭘 할 때마다 두 배로 실행 시간이 늘어난다고 보면 됨!

☝ 정리Permalink

  • O(n): 하나의 루프만 사용할 때
  • O(n^2): 중첩 루프 사용할 때
  • O(n*log(n)): 정렬을 사용할 때

n / 2나, n에 m이나 다른 미지수가 더해져도 그대로 n이라고 나타냄. 왜냐면 스케일이 커질 수록 n 앞의 숫자는 의미가 없기 때문!

🌟 정렬 알고리즘의 시간 복잡도Permalink

Sorting Algorithms 공간 복잡도 시간 복잡도    
  최악 최선 평균 최악
Bubble Sort O(1) O(n) O(n2) O(n2)
Heapsort O(1) O(n log n) O(n log n) O(n log n)
Insertion Sort O(1) O(n) O(n2) O(n2)
Mergesort O(n) O(n log n) O(n log n) O(n log n)
Quicksort O(log n) O(n log n) O(n log n) O(n2)
Selection Sort O(1) O(n2) O(n2) O(n2)
Shell Sort O(1) O(n) O(n log n2) O(n log n2)
Smooth Sort O(1) O(n) O(n log n) O(n log n)

Chulgil.Lee

댓글남기기