어떠한 문제를 해결하기 위한 일련의 절차를 공식화한 형태로 표현한 것
프로그래밍에서 알고리즘은 input 값을 통해 output 값을 얻기 위한 계산 과정
시간 복잡도
n 크기의 입력량을 처리하는데 필요한 연산의 횟수
- 현실에서 통용되는 상한선은O( n log n )까지공간 복잡도
n 크기의 입력량을 처리하는데 필요한 작업 기억 영역(메모리)의 양
- 현실에서 통용되는 상한선은 3차원( i*j*k, ..., n^3 )까지
| 표기법 | 작동 방식 | 종류 |
|---|---|---|
| O(1) | 입력값에 상관없이 문제해결 시간이 일정함 (상수 복잡도) | 해시 테이블 |
| O(log n) | 입력값에 따른 문제해결 시간이 크게 변하지 않음 (대수 복잡도) | 이진 탐색 |
| O(n) | 입력값과 문제해결 시간이 1:1 관계 (선형 복잡도) | 정렬되지 않은 배열에서의 탐색 |
| O(n log n) | 문제해결 시간이 짧은 알고리즘을 입력값만큼 수행 (선형 대수 복잡도) | 퀵 정렬, 병합 정렬, 힙 정렬 |
| O(n^2) | 입력값에 비례하고, 실행 횟수에 따라 문제해결 시간이 증가 (2차 복잡도) | 이중 for문, 삽입 정렬, 선택 정렬, 버블 정렬 |
| O(n^3) | (3차 복잡도) | 행렬 곱셉(n*m) |
| O(2^n) | 입력값에 따라 문제해결 시간이 기하급수 적으로 증가 (기하급수 복잡도, 지수 복잡도) | 완전탐색, 피보나치 수열 |
| O(n!) | 팩토리얼 복잡도 | 완전탐색 무작위대입 |
출처 : 사진 클릭 시 이동