반응형

 

 

"시간복잡도"

 

개발을 하다보면 같은 기능인데도 어떤 구현은 가볍게 돌아가고,

어떤 구현은 데이터가 조금만 늘어도 갑자기 버벅이는 경우가 있다.


이 차이를 설명해주는 것이 시간복잡도(Time Complexity)이고, 우리는 보통 Big-O 표기법으로 표현한다.

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

1) 시간복잡도란?

 


시간복잡도는 실행 시간(ms) 자체가 아니라, 

입력 크기 n이 커질 때 필요한 연산 수가 어떻게 증가하는지를 말한다.

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

2) 왜 중요한가?

 

Unity 관점에서 본다면,
Unity는 프레임 단위로 돌아가고, 60fps 기준 1프레임 예산은 약 16.67ms.
Update에서 O(n²) 같은 패턴이 숨어 있으면, 오브젝트 수가 늘어나는 순간 프레임이 깨진다.

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

3) Big-O 표기법이란?

 

입력 크기 n이 커질 때 

알고리즘의 실행 시간(또는 메모리 사용량)이 

얼마나 빠르게 증가하는지(성장률)를 나타내는 표기법



 

O(1): 입력 크기와 무관 (상수 시간)

O(log n): 절반씩 줄어듦 (이진 탐색)

O(n): 한 번 순회 (단일 루프)

O(n log n): 정렬/분할정복 계열

O(n²): 이중 루프(모든 쌍 비교)

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

4) 최악 시간복잡도 vs 평균 시간복잡도

 

 

최악 시간복잡도 (Worst Case)

가장 불리한 입력/상황에서 걸리는 시간

상한(upper bound) 개념이라,

'이 정도는 절대 넘지 않는다'를 보장한다.

게임/실시간(프레임 예산)에서는 스파이크 방지 때문에 중요하다.

 


예시)
선형 탐색: 못 찾는 경우가 최악 → O(n)
퀵정렬: 피벗이 계속 나쁘면 최악 → O(n²)

 

 

 


평균 시간복잡도 (Average Case)

일반적인 입력이 들어온다고 가정했을 때의 기대 성능(기댓값)
(단, 평균은 입력 분포 가정이 들어가므로, 실제 데이터가 편향되어 있으면 평균과 다르게 나올 수 있다.)

 


예시)
해시 기반(Dictionary/HashSet): 보통(평균) 조회가 빠름 → 평균 O(1)
(구현/상황에 따라 충돌이 심해지면 최악은 더 나빠질 수 있음)

 

 

 

+++

 

간단 한줄 정리

 

평균:

대부분의 경우 얼마나 빠른가

(기대 성능)

최악:

운이 나빠도 어디까지 느려질 수 있나

(상한/안전선)

 

 


----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

5) C# 컬렉션과 시간복잡도(선택 기준)

 


자료구조 선택은 곧 시간복잡도 선택이다.

특히 Unity에서는 매 프레임 호출되는지 여부가 매우 중요하다.

 



키로 빠르게 찾기 → Dictionary, HashSet (평균 O(1))

순회/인덱싱 중심 → List (인덱스 O(1), Contains는 O(n))

정렬된 순회가 필요 → SortedDictionary/SortedSet (O(log n))

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

6) 오늘의 한 줄 요약

 


  시간복잡도입력 크기 n이 커질 때 연산량이 얼마나 빨리 증가하는지(성장률)를 나타내는 지표다.

반응형

'1일 1 cs' 카테고리의 다른 글

14. 정렬 알고리즘이란?  (0) 2026.01.29
13. 컬렉션(Collection)이란?  (0) 2026.01.28
11. GC(Garbage Collector) 란?  (0) 2026.01.26
10. 애니메이션(Animation)과 애니메이터(Animator)란?  (0) 2026.01.25
9. 컬링(Culling)이란?  (0) 2026.01.24

+ Recent posts