UnisquadsU
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

Big-O 표기법 (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.22 14:24

Big-O 표기법

정의

알고리즘의 시간 복잡도 또는 공간 복잡도를 점근적 상한으로 표현하는 수학적 표기법

유형

점근 표기법

개발자/도입

파울 바흐만(Paul Bachmann)이 도입하고 에드문트 란다우(Edmund Landau)가 대중화함

주요 용도

알고리즘의 효율성 분석

입력 크기 증가에 따른 성능 변화 예측

알고리즘 비교

관련 분야

알고리즘 분석

자료구조

계산 복잡도 이론

컴퓨터 과학

상세 정보

표기법 종류

Big-O (O): 점근적 상한 (최악의 경우)

Big-Omega (Ω): 점근적 하한 (최선의 경우)

Big-Theta (Θ): 점근적 상한과 하한의 일치 (평균/정확한 경우)

일반적인 복잡도

O(1): 상수 시간

O(log n): 로그 시간

O(n): 선형 시간

O(n log n): 선형 로그 시간

O(n²): 제곱 시간

O(2ⁿ): 지수 시간

O(n!): 팩토리얼 시간

계산 규칙

계수 법칙: 상수 계수는 무시

합의 법칙: 복잡도는 더해짐

곱의 법칙: 복잡도는 곱해짐

다항식 법칙: 가장 높은 차수의 항만 남김

장점

알고리즘의 성장 추세를 직관적으로 비교 가능

하드웨어 독립적인 분석 가능

복잡한 연산을 단순화하여 표현 가능

단점/한계

정확한 실행 시간을 예측하지는 않음

상수 계수와 낮은 차수의 항을 무시함

최악의 경우만을 고려하는 Big-O는 현실과 다를 수 있음

1. 개요

빅 오 표기법은 알고리즘의 효율성을 분석하는 데 사용되는 점근 표기법이다. 주로 알고리즘의 시간 복잡도나 공간 복잡도를 입력 크기에 대한 함수로 표현하며, 입력 크기가 매우 커질 때의 성능 변화 추세를 점근적 상한으로 나타낸다.

이 표기법은 1894년 파울 바흐만이 도입했으며, 에드문트 란다우에 의해 널리 대중화되었다. 알고리즘이 처리해야 할 데이터의 양이 증가함에 따라 소요되는 시간이나 메모리 사용량이 어떻게 변하는지를 예측하고 비교하는 핵심 도구로, 계산 복잡도 이론과 자료구조 설계의 기초를 이룬다.

빅 오 표기법의 주요 목적은 알고리즘의 최악의 경우 성능을 간결하게 표현하여, 서로 다른 알고리즘의 효율성을 비교할 수 있게 하는 것이다. 이를 통해 프로그래머는 문제를 해결하는 데 더 적합한 알고리즘을 선택할 수 있다.

2. 정의

빅 오 표기법은 알고리즘의 실행 시간이나 메모리 사용량과 같은 복잡도를 표현하는 점근 표기법의 일종이다. 이 표기법은 입력 크기 n이 무한히 커질 때 알고리즘의 성능이 어떻게 변하는지 그 상한을 수학적으로 기술한다. 파울 바흐만이 도입하고 에드문트 란다우가 대중화한 이 개념은 컴퓨터 과학의 핵심 도구로 자리 잡았다.

정의에 따르면, 어떤 함수 f(n)이 O(g(n))이라는 것은 충분히 큰 모든 n에 대해 f(n)의 증가율이 g(n)의 상수 배를 넘지 않음을 의미한다. 즉, 입력 크기 n이 증가함에 따라 알고리즘의 수행 시간이나 공간 요구량이 최악의 경우 g(n)의 비율로 증가한다고 예측하는 것이다. 이는 알고리즘의 정확한 실행 시간을 계산하기보다는 성장 추세에 주목한다.

이 표기법의 주요 용도는 알고리즘의 효율성을 분석하고 비교하는 데 있다. 서로 다른 알고리즘을 입력 크기 증가에 따른 성능 변화의 관점에서 평가할 수 있게 해주며, 계산 복잡도 이론과 자료구조 설계의 기초를 제공한다. 따라서 복잡한 시스템을 설계하거나 성능을 최적화할 때 필수적으로 고려된다.

3. 표기법의 종류

3.1. 빅 오(Big-O)

빅 오(Big-O) 표기법은 알고리즘의 성능을 분석하는 데 가장 널리 사용되는 점근 표기법이다. 이 표기법은 알고리즘의 실행 시간이나 메모리 사용량과 같은 복잡도가 입력 크기 n이 무한히 커질 때, 상한을 기준으로 어떻게 증가하는지를 나타낸다. 즉, 최악의 경우를 고려한 성능의 증가율을 표현한다. 파울 바흐만이 도입하고 에드문트 란다우가 대중화한 이 개념은 알고리즘의 효율성을 비교하고 예측하는 핵심 도구로 자리 잡았다.

빅 오 표기법의 핵심은 상수 계수와 낮은 차수의 항을 무시하고, 가장 지배적인 증가 항만을 고려하는 데 있다. 예를 들어, 어떤 알고리즘의 실행 시간이 5n² + 3n + 20과 같이 표현된다면, n이 충분히 커졌을 때 n² 항이 전체 성능을 지배하게 된다. 따라서 이 알고리즘의 시간 복잡도는 O(n²)으로 표기한다. 이는 입력 크기 n의 증가에 따라 실행 시간이 최악의 경우 n²에 비례하여 증가함을 의미한다.

빅 오 표기법은 주로 알고리즘의 시간 복잡도 분석에 사용되지만, 공간 복잡도를 분석하는 데에도 적용된다. 이 표기법을 통해 프로그래머는 특정 문제를 해결하기 위한 여러 알고리즘 중 어떤 것이 더 효율적인지, 그리고 대규모 데이터를 처리할 때 성능이 어떻게 될지 예측할 수 있다. 이는 효율적인 소프트웨어를 설계하고, 계산 복잡도 이론을 이해하는 데 필수적이다.

빅 오 표기법은 다른 점근 표기법인 빅 오메가(Ω)와 빅 세타(Θ)와 함께 사용된다. 빅 오메가는 알고리즘 성능의 점근적 하한을, 빅 세타는 점근적 상한과 하한이 동일한 경우, 즉 정확한 증가율을 나타낸다. 이들 표기법은 알고리즘 분석과 자료구조 연구의 근간을 이루며, 컴퓨터 과학 전반에 걸쳐 중요한 이론적 틀을 제공한다.

3.2. 빅 오메가(Big-Ω)

빅 오메가는 점근적 하한을 나타내는 표기법이다. 이는 알고리즘이 최소한 이 정도의 성능은 보장한다는 의미로, 성능의 하한선을 설명할 때 사용된다. 예를 들어, 어떤 정렬 알고리즘의 시간 복잡도가 Ω(n log n)이라면, 그 알고리즘은 최선의 경우에도 입력 크기 n에 대해 n log n에 비례하는 시간 이하로는 수행될 수 없음을 의미한다. 이는 해당 문제를 해결하기 위한 이론적 한계를 나타내는 데 유용하다.

빅 오메가는 주로 알고리즘의 최선의 경우나 문제 자체의 복잡도 하한을 논할 때 활용된다. 예를 들어, 비교 기반 정렬 알고리즘의 하한은 Ω(n log n)으로 알려져 있다. 이는 아무리 효율적인 비교 정렬 알고리즘이라도, 최소한 n log n 번의 비교 연산은 필요하다는 이론적 증명을 통해 얻어진 결과이다. 따라서 이 표기법은 특정 유형의 문제를 해결하는 알고리즘이 도달할 수 있는 최적의 효율성에 대한 통찰을 제공한다.

빅 오메가와 빅 오, 빅 세타의 관계는 다음과 같이 정리할 수 있다. 빅 오(O)가 점근적 상한(최악의 경우를 의미하지는 않음)을, 빅 오메가(Ω)가 점근적 하한을 나타낸다. 만약 어떤 알고리즘의 복잡도가 동일한 함수에 대해 O(f(n))이면서 동시에 Ω(f(n))이라면, 그 알고리즘의 점근적 성능은 정확히 Θ(f(n))으로 표현할 수 있다. 즉, 빅 세타는 상한과 하한이 일치하는 tight bound를 나타낸다.

표기법

의미

설명

O(f(n))

점근적 상한(Asymptotic Upper Bound)

알고리즘의 성능이 f(n)보다 나쁘지 않음을 나타냄.

Ω(f(n))

점근적 하한(Asymptotic Lower Bound)

알고리즘의 성능이 f(n)보다 좋지 않음을 나타냄.

Θ(f(n))

점근적 상하한 일치(Asymptotically Tight Bound)

알고리즘의 성능이 f(n)과 정확히 같은 비율로 증가함을 나타냄.

이러한 점근 표기법들은 알고리즘의 효율성을 이론적으로 분석하고, 서로 다른 알고리즘을 체계적으로 비교하는 계산 복잡도 이론의 핵심 도구로 사용된다.

3.3. 빅 세타(Big-Θ)

빅 세타 표기법은 알고리즘의 성능을 점근적으로 정확히 묘사할 때 사용한다. 빅 오 표기법이 최악의 경우 성능 상한을, 빅 오메가 표기법이 최선의 경우 성능 하한을 나타낸다면, 빅 세타 표기법은 이 두 가지가 일치하는 경우, 즉 알고리즘의 성능이 특정 함수와 점근적으로 동일한 증가율을 가질 때 사용한다. 다시 말해, 입력 크기 n이 충분히 커졌을 때, 알고리즘의 실행 시간이 상수 배를 제외하고 특정 함수와 같아지는 것을 의미한다.

알고리즘이 Θ(f(n))이라는 것은, 충분히 큰 n에 대해 실행 시간이 c₁ * f(n)과 c₂ * f(n) 사이에 항상 존재하는 양의 상수 c₁, c₂가 존재함을 뜻한다. 이는 알고리즘의 성능이 최악의 경우와 최선의 경우 모두 f(n)의 비율로 증가한다는 강력한 진술이다. 예를 들어, 입력 배열의 모든 요소를 한 번씩 확인하는 선형 탐색 알고리즘은 최선의 경우 첫 번째 요소에서 찾을 수 있지만, 최악의 경우 마지막 요소까지 확인해야 한다. 따라서 이 알고리즘의 시간 복잡도는 빅 오로는 O(n), 빅 오메가로는 Ω(1)으로 서로 다르기 때문에 빅 세타 표기법으로 단일 함수로 묶어 표현할 수 없다.

반면, 모든 쌍을 비교하는 버블 정렬과 같은 기본적인 정렬 알고리즘은 데이터 분포와 관계없이 항상 일정한 비교 횟수를 수행한다. 최선, 평균, 최악의 경우 모두 실행 시간이 n²에 비례하므로, 이러한 알고리즘의 시간 복잡도는 Θ(n²)으로 표현할 수 있다. 빅 세타 표기법은 알고리즘의 성능을 가장 정밀하게 분류하는 도구로, 점근적 분석에서 매우 유용하다.

4. 시간 복잡도 예시

4.1. 상수 시간: O(1)

상수 시간 복잡도 O(1)은 입력 크기 n이 증가하더라도 알고리즘의 실행 시간이 변하지 않는 경우를 나타낸다. 즉, 처리해야 할 데이터의 양이 아무리 많아져도 연산 횟수가 고정되어 있어 실행 시간이 일정하게 유지된다. 이는 가장 이상적인 시간 복잡도로 간주된다.

O(1) 연산의 대표적인 예로는 배열에서 인덱스를 사용한 원소 접근, 연결 리스트의 헤드 노드 접근, 해시 테이블에서의 검색(최적의 경우) 등이 있다. 이러한 연산들은 데이터 구조의 크기와 무관하게 항상 동일한 수의 단계만을 거치기 때문에 상수 시간을 보장한다.

연산 예시

설명

배열 인덱스 접근

메모리 주소를 직접 계산하여 한 번의 접근으로 원소를 찾는다.

스택의 push/pop

스택의 top 위치를 알고 있으므로 데이터 크기와 무관하게 작업이 완료된다.

사전(dict) 조회

해시 함수를 통해 키의 위치를 바로 계산하여 접근한다(충돌이 없는 경우).

상수 시간 알고리즘은 입력 크기에 의존하지 않는 효율성을 가지므로, 대규모 데이터를 처리할 때 매우 유리하다. 그러나 실제 구현에서는 메모리 계층 구조의 영향(예: 캐시 히트 또는 미스)으로 인해 절대적인 시간 일정성이 깨질 수 있다는 점을 고려해야 한다.

4.2. 로그 시간: O(log n)

로그 시간 복잡도 O(log n)는 입력 크기 n이 증가할 때 알고리즘의 실행 시간이 로그 함수의 비율로 증가하는 것을 나타낸다. 여기서 로그의 밑은 보통 2를 사용하며, 이는 입력을 반복적으로 절반으로 나누는 이진 탐색과 같은 알고리즘의 전형적인 특성이다. 입력이 두 배로 늘어나도 실행 시간은 단지 1 단위만 증가하는 매우 효율적인 성장률을 보인다.

이러한 복잡도를 가지는 대표적인 알고리즘은 이진 탐색이다. 정렬된 배열에서 특정 값을 찾을 때, 배열의 중간 값을 확인하고 찾는 값과 비교하여 탐색 범위를 절반씩 줄여나간다. 이 과정은 재귀 또는 반복문을 통해 구현되며, 각 단계마다 문제의 크기가 절반으로 감소한다. 균형 이진 탐색 트리에서의 탐색 연산도 동일한 로그 시간 복잡도를 가진다.

로그 시간 복잡도는 상수 시간 O(1) 다음으로 매우 효율적인 것으로 평가된다. 선형 탐색의 O(n)과 비교할 때, 입력 크기가 커질수록 성능 차이는 극명하게 벌어진다. 예를 들어, 100만 개의 데이터에서 특정 항목을 찾는 데 선형 탐색은 최대 100만 번의 비교가 필요할 수 있지만, 이진 탐색은 약 20번의 비교만으로도 동일한 작업을 수행할 수 있다. 이는 데이터베이스 인덱싱이나 대규모 정렬된 데이터 처리에서 매우 중요한 특성이다.

4.3. 선형 시간: O(n)

선형 시간 복잡도 O(n)은 입력 크기 n에 비례하여 실행 시간이 증가하는 알고리즘의 성능을 나타낸다. 예를 들어, 크기가 n인 배열의 모든 요소를 한 번씩 순회하는 경우가 대표적이다. 입력이 하나 증가할 때마다 필요한 연산도 거의 정비례로 증가하기 때문에, 데이터 양이 많아질수록 실행 시간이 직선적으로 늘어난다.

O(n) 알고리즘의 일반적인 예로는 선형 검색이 있다. 정렬되지 않은 리스트에서 특정 값을 찾을 때, 최악의 경우 리스트의 처음부터 끝까지 모든 요소를 확인해야 한다. 또한 배열의 모든 요소를 더하거나, 연결 리스트를 순회하며 각 노드를 처리하는 작업도 대체로 선형 시간을 가진다.

알고리즘 예시

설명

선형 검색(Linear Search)

정렬되지 않은 배열에서 요소를 찾기 위해 처음부터 끝까지 순차적으로 확인

배열 요소의 합 계산

배열의 모든 요소를 한 번씩 방문하여 합계를 누산

연결 리스트 순회

리스트의 헤드부터 시작하여 각 노드를 차례대로 방문

선형 시간은 상수 시간 O(1)보다는 느리지만, 이차 시간 O(n²)이나 지수 시간 O(2ⁿ)과 같은 더 높은 복잡도에 비해 훨씬 효율적이다. 대규모 데이터를 처리할 때는 O(n) 알고리즘의 성능이 매우 중요해지며, 정렬이나 검색 알고리즘을 설계할 때 선형 시간 안에 문제를 해결할 수 있는지가 주요 고려 사항이 된다.

4.4. 선형 로그 시간: O(n log n)

선형 로그 시간 복잡도 O(n log n)는 입력 크기 n에 대해 수행 시간이 n과 log n의 곱에 비례하여 증가하는 것을 의미한다. 이는 효율적인 정렬 알고리즘이나 이진 탐색 트리 연산에서 흔히 나타나는 복잡도로, 대규모 데이터 처리에 매우 적합한 성능을 보인다.

대표적인 O(n log n) 알고리즘으로는 합병 정렬, 힙 정렬, 그리고 평균적인 경우의 퀵 정렬이 있다. 이 알고리즘들은 분할 정복 또는 이진 힙과 같은 효율적인 자료구조를 활용하여 선형 시간보다는 느리지만, 다항 시간보다는 훨씬 빠른 성능을 제공한다. 다음은 주요 알고리즘과 그 특징을 비교한 표이다.

알고리즘

평균 시간 복잡도

최악 시간 복잡도

주요 특징

합병 정렬

O(n log n)

O(n log n)

안정 정렬, 추가 메모리 공간 필요

힙 정렬

O(n log n)

O(n log n)

추가 메모리 거의 불필요, 불안정 정렬

퀵 정렬

O(n log n)

O(n²)

평균적으로 매우 빠름, 불안정 정렬

이러한 알고리즘은 데이터베이스 인덱싱, 빅데이터 처리, 컴파일러 최적화 등 다양한 컴퓨터 과학 분야에서 핵심적으로 사용된다. O(n log n)의 효율성은 단순한 O(n) 알고리즘을 적용하기 어려운 복잡한 문제를 해결할 때, O(n²) 알고리즘의 비효율성을 피하는 실용적인 균형점을 제공한다는 점에서 중요하다.

4.5. 다항 시간: O(n²), O(n³)

다항 시간 복잡도는 입력 크기 n의 다항식으로 표현되는 실행 시간을 가진 알고리즘을 설명한다. 이 범주에는 O(n²), O(n³) 등이 포함되며, 이는 입력 크기에 제곱이나 세제곱에 비례하여 실행 시간이 증가함을 의미한다. 이러한 복잡도를 가지는 알고리즘은 중첩된 반복문을 사용하는 경우가 많다. 예를 들어, 이중 for 루프를 사용하여 n개의 요소를 가진 리스트의 모든 쌍을 비교하는 알고리즘은 일반적으로 O(n²)의 시간 복잡도를 가진다.

O(n²) 복잡도는 버블 정렬, 선택 정렬, 삽입 정렬과 같은 단순한 정렬 알고리즘에서 흔히 나타난다. 또한 인접 행렬을 사용한 그래프 표현에서 모든 노드 쌍을 확인하는 연산도 이에 해당한다. O(n³) 복잡도는 세 개의 중첩된 반복문을 포함하는 알고리즘에서 발생하며, 대표적인 예로 세 변수에 대한 모든 조합을 검사하는 알고리즘 또는 기본적인 형태의 플로이드-워셜 알고리즘이 있다.

다항 시간 알고리즘은 지수 시간이나 계승 시간 알고리즘에 비해 실용적인 경우가 많지만, 입력 크기가 매우 커지면 성능이 급격히 저하될 수 있다. 따라서 대규모 데이터를 처리할 때는 선형 시간이나 선형 로그 시간과 같은 더 효율적인 알고리즘을 고려하는 것이 중요하다. 알고리즘의 효율성 분석과 비교를 위해 점근 표기법을 사용하는 이유 중 하나가 바로 이러한 성능 차이를 명확히 이해하기 위함이다.

복잡도

일반적 예시

특징

O(n²)

버블 정렬, 선택 정렬, 이중 반복문을 통한 모든 쌍 비교

입력 크기가 두 배가 되면 실행 시간은 대략 네 배 증가

O(n³)

기본적인 플로이드-워셜 알고리즘, 삼중 중첩 반복문

입력 크기가 두 배가 되면 실행 시간은 대략 여덟 배 증가

이러한 다항 시간 복잡도는 계산 복잡도 이론에서 P 문제를 정의하는 기준이 되며, 알고리즘 분석의 핵심 개념이다.

4.6. 지수 시간: O(2ⁿ)

지수 시간 복잡도 O(2ⁿ)는 입력 크기 n에 대해 알고리즘의 수행 시간이 지수적으로 증가함을 나타낸다. 이는 입력이 하나 증가할 때마다 필요한 연산량이 대략 두 배가 된다는 의미로, 매우 비효율적인 알고리즘의 특징이다. 대표적인 예로는 모든 가능한 부분집합을 나열하는 문제나, 재귀적으로 구현된 피보나치 수 계산 등이 있다. 이러한 알고리즘은 입력 크기가 조금만 커져도 실행 시간이 폭발적으로 증가하기 때문에 실용적이지 않다.

O(2ⁿ) 복잡도를 가지는 알고리즘은 일반적으로 브루트 포스 방식으로 문제를 해결한다. 예를 들어, n개의 원소를 가진 집합의 모든 부분집합을 출력하는 문제는 각 원소가 포함되거나 포함되지 않는 2가지 경우의 수가 n번 곱해지므로 총 2ⁿ개의 경우를 확인해야 한다. 여행하는 외판원 문제와 같은 NP-난해 문제를 정확히 풀기 위한 알고리즘도 지수 시간을 요구할 수 있다.

지수 시간 알고리즘의 실행 시간 증가 속도는 다른 복잡도와 비교할 때 극명하게 드러난다. 아래 표는 입력 크기 n에 따른 대략적인 연산 횟수를 보여준다.

입력 크기 (n)

O(2ⁿ) 연산 횟수

10

약 1,000

20

약 1,000,000

30

약 10억

40

약 1조

표에서 볼 수 있듯이, n이 40에 불과해도 연산 횟수는 1조에 달한다. 이는 현대의 컴퓨터로도 실질적인 시간 내에 계산을 끝내기 어려운 수준이다. 따라서 알고리즘 설계 시 지수 시간 복잡도에 도달하는 것을 피하고, 동적 계획법이나 탐욕 알고리즘 등의 더 효율적인 기법을 사용하여 다항 시간 복잡도로 개선하는 것이 중요하다.

5. 공간 복잡도

공간 복잡도는 알고리즘이 실행되는 동안 필요로 하는 메모리 공간의 양을 입력 크기에 대한 함수로 나타낸다. 시간 복잡도가 실행 시간의 효율성을 분석한다면, 공간 복잡도는 메모리 사용량의 효율성을 분석하는 척도이다. 알고리즘의 효율성을 평가할 때는 시간과 공간이라는 두 자원을 함께 고려해야 하며, 이 둘은 종종 트레이드오프 관계에 있다.

공간 복잡도 역시 빅 오 표기법을 사용하여 점근적 상한으로 표현한다. 알고리즘이 사용하는 공간은 일반적으로 고정 공간과 가변 공간으로 나뉜다. 고정 공간은 입력 크기와 무관하게 항상 필요한 공간으로, 예를 들어 코드 저장 공간, 단순 변수, 상수 크기의 자료구조가 이에 해당한다. 가변 공간은 입력 크기에 따라 변동하는 공간으로, 주로 알고리즘이 동적으로 생성하는 배열, 리스트, 재귀 호출 스택 등이 포함된다. 공간 복잡도 분석의 주된 관심사는 이 가변 공간이다.

일반적인 공간 복잡도의 예는 다음과 같다.

복잡도

설명

예시 알고리즘

O(1)

입력 크기와 무관한 상수 공간

단순 변수 교환, 반복문

O(n)

입력 크기 n에 비례하는 선형 공간

입력 배열을 복사하는 알고리즘

O(n²)

입력 크기 n의 제곱에 비례하는 공간

이차원 배열(행렬)을 생성하는 알고리즘

공간 복잡도를 분석할 때는 재귀 알고리즘에 특히 주의해야 한다. 재귀 호출마다 스택 프레임이 쌓이므로, 재귀 깊이가 입력 크기에 비례하면 공간 복잡도도 O(n)이 될 수 있다. 따라서 메모리 제약이 엄격한 임베디드 시스템이나 대규모 데이터를 처리하는 환경에서는 시간 효율성만큼 공간 효율성도 중요한 설계 고려 사항이 된다.

6. 계산 및 분석 방법

알고리즘의 복잡도를 계산하고 분석하는 방법은 일반적으로 알고리즘의 코드나 연산 과정을 단계별로 분해하여 입력 크기 n에 대한 연산 횟수를 함수 T(n)으로 표현하는 과정을 거친다. 이후 이 함수의 점근적 성장률을 파악하여 빅 오 표기법을 비롯한 점근 표기법으로 단순화한다.

분석은 일반적으로 최악의 경우를 기준으로 수행되며, 이는 알고리즘 성능의 상한을 보장하기 위함이다. 분석 과정은 반복문의 중첩 횟수, 재귀 호출의 깊이, 자료구조 연산의 비용 등을 고려한다. 예를 들어, 단일 for 루프는 O(n), 이중으로 중첩된 루프는 O(n²)의 시간 복잡도를 가질 가능성이 높다. 재귀 알고리즘의 경우 점화식을 세워 해결하는 방법이 자주 사용된다.

복잡도 함수의 지배적 항만을 남기고 상수 계수와 낮은 차수의 항을 무시하는 것이 핵심 원칙이다. 예를 들어, 연산 횟수가 T(n) = 5n² + 3n + 20으로 표현된다면, 가장 빠르게 증가하는 항은 n²이며, 상수 계수 5를 제거하여 이 알고리즘의 시간 복잡도를 O(n²)으로 결론지을 수 있다. 이렇게 단순화함으로써 다양한 알고리즘의 효율성을 입력 크기가 매우 커질 때의 추세만을 기준으로 명확하게 비교할 수 있다.

실제 분석 시에는 시간 복잡도와 공간 복잡도를 구분하여 고려해야 한다. 시간 복잡도 분석이 더 일반적이지만, 메모리 사용량이 중요한 시스템에서는 공간 복잡도 분석도 동등하게 수행된다. 또한, 평균 경우 분석이나 최선 경우 분석이 필요한 특정 맥락도 존재하지만, 알고리즘 분석의 표준은 여전히 최악 경우 분석이다.

7. 알고리즘 효율성 비교

알고리즘을 선택할 때는 문제의 규모와 제약 조건에 맞는 효율적인 알고리즘을 선택하는 것이 중요하다. 빅 오 표기법은 입력 크기 n이 커질 때 알고리즘의 수행 시간이나 사용 메모리가 어떻게 증가하는지를 나타내는 점근적 표기법으로, 서로 다른 알고리즘의 효율성을 이론적으로 비교하는 핵심 도구이다. 이 비교는 특정 자료구조를 사용하는 방식이나 문제 해결 접근법의 차이에서 비롯된 성능 특성을 명확히 보여준다.

다양한 시간 복잡도 등급을 가진 알고리즘의 성능 차이는 입력 크기가 커질수록 현격히 벌어진다. 아래 표는 입력 크기 n에 대해 각 시간 복잡도 등급을 가진 알고리즘이 수행하는 대략적인 연산 횟수를 보여준다.

시간 복잡도

n=10일 때 연산 횟수

n=1000일 때 연산 횟수

성장 특성

O(1)

1

1

상수 시간

O(log n)

~3

~10

로그 시간

O(n)

10

1,000

선형 시간

O(n log n)

~30

~10,000

선형 로그 시간

O(n²)

100

1,000,000

2차 시간

O(2ⁿ)

1,024

1.07e+301

지수 시간

예를 들어, 정렬되지 않은 배열에서 특정 값을 찾는 순차 탐색 알고리즘은 최악의 경우 모든 요소를 확인해야 하므로 O(n)의 시간이 소요된다. 반면, 정렬된 배열에서 동일한 작업을 수행하는 이진 탐색 알고리즘은 O(log n)의 시간이 소요되어 훨씬 효율적이다. 입력이 작을 때는 차이가 미미할 수 있지만, 데이터가 많아질수록 O(log n) 알고리즘의 성능 우위는 압도적으로 커진다.

따라서 알고리즘 설계나 선택 시에는 예상되는 입력의 크기와 증가 추세를 고려하여 적절한 시간 복잡도의 알고리즘을 선택해야 한다. 일반적으로 O(2ⁿ)이나 O(n!) 같은 지수 시간 또는 계승 시간 복잡도는 매우 작은 n에 대해서만 실용적이며, 대규모 데이터 처리를 위해서는 O(n log n) 이하의 알고리즘을 찾는 것이 바람직하다. 이러한 비교는 계산 복잡도 이론의 기초를 이루며, 효율적인 소프트웨어와 시스템을 구축하는 데 필수적이다.

8. 한계와 주의점

빅 오 표기법은 알고리즘의 효율성을 비교하고 예측하는 데 매우 유용한 도구이지만, 몇 가지 중요한 한계와 사용 시 주의점이 존재한다.

가장 큰 한계는 이 표기법이 점근적 성능, 즉 입력 크기가 매우 클 때의 행동에 초점을 맞춘다는 점이다. 실제 소프트웨어 개발에서 다루는 입력의 크기는 무한히 크지 않으며, 상수 계수나 낮은 차수의 항이 성능에 결정적인 영향을 미칠 수 있다. 예를 들어, 시간 복잡도가 O(n)인 알고리즘 A와 O(n log n)인 알고리즘 B가 있을 때, 입력 크기 n이 작은 구간에서는 알고리즘 B가 더 빠를 수 있다. 또한, 메모리 접근 패턴, 캐시 지역성, 하드웨어 특성 등은 빅 오 분석에 포함되지 않지만 실제 실행 시간에 큰 영향을 미친다.

빅 오 표기법을 사용할 때는 분석의 정확성에 주의해야 한다. 최악의 경우를 나타내는 빅 오(O), 최선의 경우를 나타내는 빅 오메가(Ω), 평균적인 경우를 나타내는 빅 세타(Θ)를 혼동해서는 안 된다. 알고리즘의 성능을 완전히 이해하려면 이러한 표기법들을 함께 고려해야 한다. 또한, 동일한 빅 오 복잡도를 가진 알고리즘들 사이에도 실제 성능 차이는 클 수 있으며, 공간 복잡도와 시간 복잡도 사이에는 트레이드오프 관계가 자주 발생한다. 따라서 알고리즘 선택은 문제의 제약 조건, 데이터의 특성, 구현의 복잡성 등을 종합적으로 고려하여 이루어져야 한다.

9. 관련 문서

  • 위키백과 - 점근 표기법

  • 위키백과 - 시간 복잡도

  • 위키백과 - 공간 복잡도

  • GeeksforGeeks - Analysis of Algorithms | Big-O analysis

  • Khan Academy - Asymptotic notation

  • MIT OpenCourseWare - Introduction to Algorithms

  • Big-O Cheat Sheet

  • Stack Overflow - What is a plain English explanation of "Big O" notation?

리비전 정보

버전r1
수정일2026.02.22 14:24
편집자unisquads
편집 요약AI 자동 생성