일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Navigation
- 상속 관계 매핑
- web view
- 해외 대외활동
- Project Bee
- React Native
- 구현
- bfs dfs
- React Natvive
- 비트마스킹
- 창의충전소
- 티스토리챌린지
- 백준 1992
- 휴대폰 기기
- FlatList
- 폴더구조
- 버튼 활성화
- 이영직
- 노마드코더
- 경우의 수
- 완전탐색
- 원복
- multipart upload
- springboot
- 자료구조
- react
- ReactNative
- 오블완
- service 테스트
- BFS
- Today
- Total
유미의 기록들
[알고리즘 -1] 시간복잡도, 빅오표기법, 공간복잡도 본문
알고리즘 문제를 풀 때 예제 입출력이 맞게 나와도 실제 코드를 제출했을 때 시간초과로 통과하지 못하는 경우가 종종 있다. 우리가 작성한 코드의 실행 시간을 어떻게 알 수 있을까?
이러한 시간은 사용된 언어 종류, 컴퓨터 사양, 컴파일러 속도 등 여러가지 영향을 받게 된다. 따라서 시간복잡도를 설명할 때는 입력값과 연산 수행 시간의 상관관계를 중점으로 설명한다
시간복잡도 (time complexity)
입력크기에 대해 어떠한 알고리즘이 실행되는 데 걸리는 시간, 주요로직의 반복 횟수를 중점으로 측정됨
입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘
시간복잡도 표현방법은 3가지가 있다
1) 오메가 표기법 (Big-Ω) : 최상의 경우
2) 세타 표기법 (Big-θ) : 평균의 경우
3) 빅오 표기법 (Big-O) : 최악의 경우
시간 복잡도는 주로 빅-오 표기법을 사용해 나타낸다
빅오표기법 (Big-O)
복잡도에서 가장 영향을 많이 끼치는 항의 상수인자 빼고 나머지 항을 없애서 복잡도를 나타냄
즉, 불필요한 연산을 제거하여 알고리즘 분석을 쉽게 하도록 하는 것이다.
n! > 2 ^ n > n ^2 > nlogn > n > logn > 1 순
예제 코드를 통해 빅오표기법으로 표현해보면
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int a = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
a += i + j;
}
}
System.out.println(a);
}
}
위와 같이 반복문이 두 번 있는 케이스는 시간복잡도가 O(n^2)이다.
자료구조의 시간복잡도
문제를 보고 로직을 생각할 때 시간복잡도를 대략 계산하고, 또한 로직에 알맞는 자료구조를 선택할 때 낮은 시간복잡도를 가진 자료구조를 생각하는 연습이 필요하다
공간복잡도
입력크기에 대해 어떠한 알고리즘이 실행되는 데 필요한 메모리 공간
총 공간 요구 = 고정 공간 요구 + 가변 공간 요구
- 고정 공간 : 코드 저장 공간, 단순 변수, 고정 크기의 구조 변수, 상수를 말한다
- 가변 공간 : 동적으로 필요한 공간을 말한다
공간복잡도 계산은 시간복잡도와 비슷하게 빅 오 표기법으로 표현한다
public int factorial(int n){
if(n==1){
return n;
}
return n*factorial(n-1);
}
다음 코드는 재귀함수로 구현한 것이며, 변수 n이 n개 만들어진다 따라서 공간 복잡도는 O(n) 이다
'코딩테스트 기록 > 알고리즘 개념' 카테고리의 다른 글
[알고리즘 -6] 이분탐색, LIS (0) | 2024.04.30 |
---|---|
[알고리즘 -5] 그리디, 라인스위핑, 투포인터 (1) | 2024.04.24 |
[알고리즘 -4] 비트마스킹 (0) | 2024.04.15 |
[알고리즘 -3] 완전탐색, 백트래킹 (0) | 2024.03.13 |
[알고리즘 -2] 깊이 우선 탐색(DFS) vs 너비 우선 탐색(BFS) (0) | 2024.02.20 |