빅 오 표기법(Big O notation)은 함수의 점근적 증가율을 나타내는 표기법으로, 컴퓨터 과학에서 알고리즘의 시간 복잡도와 공간 복잡도를 분석하는 데 널리 사용된다. 입력 크기 n이 무한히 커질 때 알고리즘의 실행 시간이나 메모리 사용량이 어떻게 변화하는지를 상한 기준으로 기술하며, 최악의 경우 성능을 보장하는 데 초점을 둔다. 이 표기법은 독일 수학자 파울 바흐만이 1892년 처음 도입하고 에드문트 란다우가 대중화하였으며, 이후 도널드 커누스가 컴퓨터 과학에 도입하여 널리 퍼뜨렸다.

배너 광고

개요

빅 오 표기법은 알고리즘의 성능을 대략적으로 분석하기 위해 사용한다. 입력 크기 nn이 무한히 커질 때 실행 시간이 어떻게 변화하는지를 평가하는 것이 주요 목적이다. 이 표기법은 정확한 연산 횟수보다는 데이터 증가에 따른 성능 변화의 추이를 파악하는 데 중점을 둔다.

빅 오 표기법은 함수의 점근적 상한을 제공한다. 즉, 어떤 함수 f(n)f(n)O(g(n))O(g(n))이라는 것은 충분히 큰 nn에 대해 f(n)f(n)g(n)g(n)의 상수 배를 넘지 않는다는 의미이다. 이를 통해 알고리즘의 최악의 경우 성능을 보장할 수 있다.

역사적 배경

빅 오 표기법은 독일 수학자 파울 바흐만이 1892년 정수론에 관한 저서에서 처음 사용하였다. 문자 'O'는 근삿값의 순서를 의미하는 독일어 'Ordnung'에서 따왔다. 이후 에드문트 란다우가 이 표기법을 널리 보급하여 '바흐만-란다우 표기법'이라고도 부른다.

컴퓨터 과학에서는 도널드 커누스가 1960년대 후반 《The Art of Computer Programming》에서 빅 오 표기법을 알고리즘 분석에 도입하면서 널리 사용되기 시작하였다. 커누스는 또한 빅 오메가(Ω)와 빅 세타(Θ) 표기법을 함께 소개하여 점근 표기법 체계를 완성하였다.

정의

빅 오 표기법의 수학적 정의는 다음과 같다. f(n)f(n)g(n)g(n)이 양의 정수 nn에 대해 정의된 함수라고 할 때, f(n)=O(g(n))f(n) = O(g(n))이라는 것은 다음 조건을 만족하는 양의 상수 ccn0n_0가 존재함을 의미한다.

0f(n)cg(n)for all nn00 \leq f(n) \leq c \cdot g(n) \quad \text{for all } n \geq n_0

즉, 충분히 큰 nn에 대해 f(n)f(n)g(n)g(n)의 상수 배 이하로 제한된다는 뜻이다. 이 정의는 알고리즘의 최악의 경우 실행 시간이 g(n)g(n)의 증가율을 넘지 않음을 보장한다.

예를 들어, f(n)=3n2+2n+1f(n) = 3n^2 + 2n + 1일 때 f(n)=O(n2)f(n) = O(n^2)이다. c=4c=4, n0=1n_0=1로 잡으면 3n2+2n+14n23n^2 + 2n + 1 \leq 4n^2이 성립하기 때문이다.

주요 시간 복잡도

알고리즘 분석에서 자주 등장하는 시간 복잡도 클래스는 다음과 같다.

표기법명칭설명예시 알고리즘
O(1)O(1)상수 시간입력 크기와 관계없이 일정한 실행 시간배열 인덱스 조회, 해시 테이블 삽입
O(logn)O(\log n)로그 시간입력 크기가 증가할 때 실행 시간이 로그 형태로 증가이진 탐색, 균형 이진 트리 검색
O(n)O(n)선형 시간입력 크기에 비례하여 실행 시간 증가배열 전체 순회, 선형 탐색
O(nlogn)O(n \log n)선형 로그 시간효율적인 정렬 알고리즘에서 자주 나타남병합 정렬, 힙 정렬, 퀵 정렬(평균)
O(n2)O(n^2)이차 시간입력 크기의 제곱에 비례버블 정렬, 선택 정렬, 삽입 정렬(최악)
O(2n)O(2^n)지수 시간입력 크기가 커질수록 실행 시간이 급격히 증가피보나치 수열 재귀 계산, 부분 집합 생성
O(n!)O(n!)팩토리얼 시간가장 느린 증가율 중 하나외판원 문제(TSP)의 완전 탐색

이 외에도 O(n3)O(n^3)(삼차 시간), O(n)O(\sqrt{n}) 등 다양한 복잡도가 존재한다.

다양한 시간 복잡도 함수들의 증가 순서
입력 크기 n에 따른 주요 시간 복잡도 함수들의 상대적 증가율빅오 표기법을 설명하다. 시간과 공간의 복잡도.

기타 점근 표기법

빅 오 표기법 외에도 알고리즘의 성능을 다양한 관점에서 분석하기 위한 점근 표기법이 존재한다.

  • 빅 오메가(Ω) 표기법: 알고리즘 성능의 하한을 나타낸다. f(n)=Ω(g(n))f(n) = \Omega(g(n))은 충분히 큰 nn에 대해 f(n)f(n)g(n)g(n)의 상수 배 이상임을 의미한다. 즉, 최선의 경우 성능을 표현할 때 사용한다.
  • 빅 세타(Θ) 표기법: 상한과 하한을 동시에 나타낸다. f(n)=Θ(g(n))f(n) = \Theta(g(n))f(n)=O(g(n))f(n) = O(g(n))이면서 f(n)=Ω(g(n))f(n) = \Omega(g(n))일 때 성립하며, 알고리즘의 평균적인 성장률을 정확히 기술한다.
  • 리틀 오(o) 표기법: f(n)=o(g(n))f(n) = o(g(n))f(n)f(n)g(n)g(n)보다 느리게 증가함을 의미한다. 즉, limnf(n)/g(n)=0\lim_{n \to \infty} f(n)/g(n) = 0이다.
  • 리틀 오메가(ω) 표기법: f(n)=ω(g(n))f(n) = \omega(g(n))f(n)f(n)g(n)g(n)보다 빠르게 증가함을 의미한다. 즉, limnf(n)/g(n)=\lim_{n \to \infty} f(n)/g(n) = \infty이다.

이러한 표기법들은 알고리즘의 성능을 다각도로 분석하고 비교하는 데 유용하다.

활용과 한계

빅 오 표기법은 컴퓨터 과학에서 알고리즘의 효율성을 비교하는 표준 도구로 자리 잡았다. 특히 대규모 데이터를 다루는 시스템에서 알고리즘 선택의 기준이 된다. 또한 수학에서는 해석적 수론에서 수론적 함수의 증가 경계를 표현하거나, 미적분학에서 멱급수의 오차를 제한하는 데 사용된다.

그러나 빅 오 표기법에는 몇 가지 한계가 있다. 첫째, 상수 계수를 무시하므로 실제 실행 시간이 같은 복잡도 클래스 내에서 크게 다를 수 있다. 둘째, 최악의 경우만 고려하므로 평균적인 성능이나 실제 입력 분포를 반영하지 못할 수 있다. 셋째, 입력 크기가 작을 때는 점근적 분석이 실제 성능과 맞지 않을 수 있다. 따라서 빅 오 표기법은 알고리즘의 이론적 분석 도구로 사용되며, 실제 구현에서는 추가적인 벤치마킹이 필요하다.

참고 자료

5
점근 표기법점근 표기법 빅-O 표기법(Big O notation)은함수의정의역에 대한 대략적인 크기를 설명하는수학적 표기법이다. 빅-O는 독일 수학자파울 바흐만과에드문트 란다우가 발명하고 다른 사람들이 확장한일련의 표기법중 하나이며, 이를 통틀어 바흐만-란다우 표기법이라고 한다. 문자 O는 바흐만이근삿값의 순서를 의미하는 Ordn…https://ko.wikipedia.org/wiki/%EC%A0%90%EA%B7%BC_%ED%91%9C%EA%B8%B0%EB%B2%95빅오 표기법을 설명하다. 시간과 공간의 복잡도.빅오 표기법을 설명하다. 시간과 공간의 복잡도. 번역자: Alison Yoon저자: freeCodeCamp.org (영어) 기사 원문: What is Big O Notation Explained: Space and Time Complexity 빅오 표기법을 완벽히 이해하시나요? 만약 그렇다면 이 글이 면접 전에 기억을…https://www.freecodecamp.org/korean/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/빅 오 표기법(Big O notation) - 기계인간 John Grib빅 오 표기법(Big O notation) - 기계인간 John Grib big-O big-O 예제 - 예제 1 - 예제 2 big-Omega, Ω - 예제 증가량 비교 주요 증가율 - 로그 \(O(\log n)\) - 선형 \(O(n)\) - 선형 로그형 \(O(n \log n)\) - 제곱 \(O(n^2)\) - 지…https://johngrib.github.io/wiki/big-O-notation/Big O Notation - IT 위키Big O Notation - IT 위키 ## 익명 사용자 ### 검색 # Big O Notation Big O Notation is a mathematical concept used to describe the performance or complexity of an algorithm. It provides an up…https://itwiki.kr/w/Big_O_Notation점근 표기법 - IT 위키점근 표기법 - IT 위키 ## 익명 사용자 ### 검색 # 점근 표기법 Big-O Notation 알고리즘 성능 측정 기준 - O(1) : 입력 자료의 수에 관계없이 일정한 실행 시간을 갖는 알고리즘 - O(log N) : 입력 자료의 크기가 N일경우 log2N 번만큼의 수행시간을 가진다. - O(N) : 입력 자료의…https://itwiki.kr/w/%EC%A0%90%EA%B7%BC_%ED%91%9C%EA%B8%B0%EB%B2%95

관련 문서