빅오 표기법

IT 위키

빅오 표기법(Big-O Notation)은 알고리즘의 시간 복잡도와 공간 복잡도를 분석하는 데 사용되는 수학적 표기법이다. 주어진 입력 크기에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 나타내며, 최악의 경우 성능을 분석하는 데 주로 사용된다.

개요[편집 | 원본 편집]

빅오 표기법은 알고리즘의 성능을 대략적으로 분석할 때 활용되며, 주요 목적은 입력 크기가 커질수록 실행 시간이 어떻게 변화하는지를 평가하는 것이다. 빅오 표기법은 상수 계수를 무시하고, 가장 높은 차수의 항만을 고려하여 표현된다.

주요 시간 복잡도[편집 | 원본 편집]

빅오 표기법에서 자주 사용되는 시간 복잡도는 다음과 같다.

  • O(1) - 상수 시간 (Constant Time)
    • 입력 크기와 관계없이 실행 시간이 일정함.
    • 예시: 배열에서 특정 인덱스의 값을 조회하는 연산
  • O(log n) - 로그 시간 (Logarithmic Time)
    • 입력 크기가 증가할 때 실행 시간이 로그 형태로 증가함.
    • 예시: 이진 탐색 (Binary Search)
  • O(n) - 선형 시간 (Linear Time)
    • 입력 크기에 비례하여 실행 시간이 증가함.
    • 예시: 배열의 모든 요소를 순회하는 연산
  • O(n log n) - 선형 로그 시간 (Linearithmic Time)
    • 입력 크기에 로그 값을 곱한 형태로 실행 시간이 증가함.
    • 예시: 병합 정렬 (Merge Sort), 퀵 정렬 (Quick Sort) 평균 및 최적의 경우
  • O(n²) - 이차 시간 (Quadratic Time)
    • 입력 크기의 제곱에 비례하여 실행 시간이 증가함.
    • 예시: 버블 정렬 (Bubble Sort), 선택 정렬 (Selection Sort)
  • O(2ⁿ) - 지수 시간 (Exponential Time)
    • 입력 크기에 대해 지수적으로 실행 시간이 증가함.
    • 예시: 피보나치 수열의 재귀적 계산
  • O(n!) - 팩토리얼 시간 (Factorial Time)
    • 입력 크기가 커질수록 실행 시간이 매우 빠르게 증가함.
    • 예시: 외판원 문제(Travelling Salesman Problem, TSP)와 같은 NP-완전 문제의 완전 탐색

빅오 표기법의 특징[편집 | 원본 편집]

  • 최악의 경우를 기준으로 알고리즘의 성능을 분석함.
  • 상수 계수 및 낮은 차수의 항을 무시하여 대략적인 성능을 표현함.
  • 알고리즘 간의 성능 비교 및 최적화 시 중요한 기준이 됨.

예제[편집 | 원본 편집]

다음은 특정 알고리즘의 빅오 표기법을 설명하는 예제이다.

def linear_search(arr, target):
    for i in range(len(arr)):  # O(n)
        if arr[i] == target:
            return i
    return -1

위 코드에서 최악의 경우 모든 요소를 순회해야 하므로 시간 복잡도는 O(n)이다.

관련 개념[편집 | 원본 편집]

  • 세타(Θ) 표기법 - 평균적인 경우의 실행 시간을 나타냄.
  • 오메가(Ω) 표기법 - 최선의 경우의 실행 시간을 나타냄.
  • 공간 복잡도 - 알고리즘이 사용하는 메모리의 증가율을 분석함.

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms. MIT Press.
  • Knuth, D. E. (1997). The Art of Computer Programming. Addison-Wesley.