728x90
1. 시간 복잡도 표기
수행 시간은 1초에 1억 번의 연산을 하는 것으로 간주한다.
문제를 해결하기 위한 연산 횟수인 시간 복잡도는 3가지 유형으로 정의한다.
- 빅-오메가(Ω(n)) : best case
- 빅-세타(Θ(n)) : average case
- 빅-오(O(n)) : worst case
각각 최선, 보통, 최악일 때 연산 횟수를 나타낸다.
시간 복잡도는 n이 증가함에 따라 같이 증가한다. 증가 속도는 위 그림과 같다.
2. 시간 복잡도 활용하기
시간 복잡도로 코드의 로직을 개선할 수 있다.
시간 복잡도 계산에는 상수를 제외하고, 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다.
public class Main {
public static void main(String[] args) {
int N = 100000;
int cnt = 0;
for (int i = 0; i < N; i++) {
System.out.println(cnt++);
}
for (int i = 0; i < N; i++) {
System.out.println(cnt++);
}
for (int i = 0; i < N; i++) {
System.out.println(cnt++);
}
}
}
하나의 for문은 연산 횟수가 N이다.
똑같은 for문이 세 개 있으므로 연산 횟수는 3N이다.
그러나 시간 복잡도 계산에서는 상수를 제외하므로 시간 복잡도는 O(n)이다.
public class Main {
public static void main(String[] args) {
int N = 100000;
int cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.println(cnt++);
}
}
}
}
for문이 두 번 중첩되어 연산 횟수가 N2이다.
따라서 시간 복잡도는 O(N2)이다.
728x90
'책 > Do it! 알고리즘 코딩 테스트 자바 편' 카테고리의 다른 글
Day-3 슬라이딩 윈도우 (1) | 2024.03.17 |
---|---|
Day-3 투 포인터 (2) | 2024.03.17 |
Day-2 구간 합 (0) | 2024.03.13 |
Day-2 배열과 리스트 (0) | 2024.03.13 |
Day-1 디버깅 (0) | 2024.03.11 |