시간복잡도와 공간복잡도
시간복잡도와 공간복잡도는 알고리즘이나 자료구조의 성능을 평가하는 척도들을 의미한다.
구분 | 개념 |
---|---|
시간복잡도 | 입력값의 크기(=개수)와 알고리즘의 연산 수행 시간 간의 상관관계를 분석하여 나타낸 것 |
공간복잡도 | 입력값의 크기(=개수)와 알고리즘이 실행시 사용하는 메모리의 양간의 상관관계를 분석하여 나타낸 것. |
시간복잡도
시간복잡도란, 입력값의 크기(=개수)와 알고리즘의 연산 수행 시간 간의 상관관계를 분석하여 나타낸 것이다. 이는 알고리즘의 효율성을 평가하는 중요한 척도 중 하나이다. 보통 시간복잡도는 빅오 표기법을 사용한다.
시간복잡도 | 명칭 | 설명 | 예시 |
---|---|---|---|
O(1) | 상수 시간 | 입력 크기와 상관 없이 항상 일정한 시간이 걸리는 경우, 효율성이 매우 뛰어난 시간복잡도. |
배열의 특정 인덱스에 접근 변수 값을 단순히 반환 |
O(logn) | 로그 시간 | 입력 크기가 증가할수록 실행 시간이 매우 완만하게 증가하는 경우. 비교적 효율적인 시간복잡도. |
이진 탐색 |
O(n) | 선형 시간 | 입력 크기와 실행 시간이 선형적으로 비례해 증가하는 경우. 일반적으로 효율적. 대규모 데이터에서는 더 효율적인 알고리즘을 찾는 게 권장됨. |
선형 탐색 |
O(nlogn) | 선형 로그 시간 | 선형 시간과 로그 시간이 결합된 형태. 입력 데이터를 한 번 순회하면서, 각 단계에서 로그 시간의 작업을 수행하는 경우 발생. 비교 기반 정렬 알고리즘 중에 최선의 시간복잡도. 대규모 데이터 처리에 적합. |
병합 정렬, 힙 정렬 |
O(n^2) | 이차 시간 | 중첩 루프를 사용하는 알고리즘에서 주로 나타나는 시간복잡도 입력 데이터의 각 요소를 다른 모든 요소와 비교하거나 처리해야 하는 경우. 입력 크기가 커질수록 실행 시간이 매우 빠르게 증가. 데이터가 커질수록 비효율적 |
버블 정렬, 선택 정렬 |
O(2^n) | 지수 시간 | 입력 크기가 증가할수록 실행 시간이 기하급수적으로 증가하는 시간복잡도 재귀적으로 모든 가능한 경우를 탐색하는 알고리즘에서 나타남 매우 비효율적이며, 현실적으로 큰 데이터 처리가 불가함 |
피보나치 수열의 비효율적 재귀 풀이 |
O(n!) | 팩토리얼 시간 | 입력 데이터의 모든 순열을 생성하거나 조합을 시도해야하는 경우 입력 크기가 약간만 커져도 실행 시간이 급격히 증가함 실제로 사용할 수 없는 경우가 많다. |
순열 생성 알고리즘 |
공간 복잡도
공간복잡도란, 입력값의 크기(=개수)와 알고리즘이 실행시 사용하는 메모리의 양간의 상관관계를 분석하여 나타낸 것이다. 이는 알고리짐의 효율성을 평가하는 또 다른 중요한 척도이다. 공간복잡도 또한 빅오 표기법으로 표현된다.
프로그램을 실행할 때에 사용되는 공간은 고정 공간, 가변 공간, 보조 공간 세 가지가 있다. 공간복잡도를 계산할 때에는 기본적으로 이 중 고정 공간
과 가변 공간
이 사용하는 공간을 대상으로 한다. (공간복잡도의 분석 대상 = 고정 공간 + 가변 공간)
공간복잡도
공간복잡도 | 명칭 | 설명 | 예시 |
---|---|---|---|
O(1) | 상수 공간 | 입력 크기와 상관없이 일정한 메모리만 사용하는 경우 | 배열A[n] 의 첫 번째 요소를 찾는 함수 |
O(n) | 선형 공간 | 입력 크기에 선형적으로 비례하여 메모리를 사용하는 경우 | 입력 데이터 복사 |
O(n^2) | 이차 공간 | 입력 크기 n에 비례해 n^2의 공간이 필요한 경우 | n*n 2차원 배열 생성 함수 |
이외 생략 |
공간의 구분
공간 | 설명 | 예시 |
---|---|---|
고정 공간 | 입력 크기와 관계없이 일정한 크기의 메모리 사용 | 상수, 고정크기 변수 |
가변 공간 | 입력 크기에 따라 달라지는 메모리 공간 | 배열, 리스트, 스택.. |
보조 공간 | 알고리즘 작업 수행동안 임시로 사용하는 추가 공간 | 임시 배열, 캐시 메모리.. |