다음을 참조하여 작성하였습니다.🙇🏻♂️
알고리즘의 성능을 측정하는 5가지 기준이라고 한다.
문제를 해결하는데 걸리는 시간과 입력의 함수 관계 프로그램을 작성할 때에 입력의 크기에 따라서 프로그램이 계산하는 횟수가 크게 달라진다. 입력된 자료의 양과 알고리즘 실행에 걸리는 시간 사이에는 어느 정도의 관계가 있다. 이것을 알고리즘의 시간 복잡도라 한다.
시간 복잡도를 나타낼 때에는 Big O 표기법을 이용한다.
예를 들어서, 1부터 n까지의 합을 구한다고 할 때, 다음과 같은 두 가지 방법이 있다.
// 방법 1
int n, res = 0;
for (int i = 1; i <= n;, i++) {
res += i;
}
System.out.println(res);
// 방법 2
int n, res = 0;
res = n*(n+1)/2;
System.out.println(res);
코드를 살펴보면
시간 복잡도 | 설명 |
---|---|
O(1) | 상수 형태(n의 값에 상관없이 일정한 양의 계산만 함) |
O(logn) | 로그 형태 |
O(n) | 선형 |
O(nlogn) | 선형로그 형태 |
O(n2),O(n3),⋯ | 다차 형태 |
O(2n) | 지수 형태 |
O(n!) | 팩토리얼 형태 |
맨 위에서부터 시간 복잡도가 낮고 빠르고,
아래로 갈 수록 시간 복잡도가 높고 느려진다.
제한된 시간 안에 올바르게 output을 출력하려면 시간 복잡도를 낮춰야 할 것임을 알 수 있다.