[수학] 2. 알고리즘 복잡도
1. 알고리즘 평가 지표
- 정확성
- 작업량
메모리 사용량
- 최적성
- 효율성 (
시간 복잡도
+ 공간 복잡도)
2. 시간 복잡도
- 입력 크기의 값에 대해 단위 연산을 몇 번 수행하는지 계산하여, 알고리즘의 수행시간을 평가하는 방법
- 3가지 점근적 표현법
- O 빅오 :
최악의 상황
을 고려하여 성능 측정 결과 표현 👍 - Θ 세타 :
평균
적인 경우에서의 성능 측정 결과 표현 - Ω 오메가 :
최선의 상황
일 때의 성능 축정 결과 표현
Big-O Complexity Chart
- 상수는 O(1)
- for 문 하나당 n
- 총 횟수에서 가장 높은 차수 반영한다.
O(1)
function big_o(n) {
let sum = 0 //1회
sum = n*2 //1회
return sum //1회
// 총 3회 > 상수이므로 O(1)
// 아주 빠르다
}
O(N)
function big_o(arr, n) {
let sum = 0 //1회
for (let i = 0; i< n; i++){
sum += arr[i]
} // n회
return sum //1회
// 총 n+2회 > O(N)
// 괜찮은 편
}
O(N2)
function big_o(arr, n) {
let sum = 0 //1회
for (let i = 0; i< n; i++){
for (let j = 0; j<n; j++){
sum += arr[i]
}
} // n * n = n2회
return sum //1회
// 총 n2+2회 > O(N2)
// 많이 느린편
}
O(logN)
function big_o(arr, n) {
let sum = 0 //1회
for (let i = 0; i< n; i *=2){
sum += 2
}
// 절반 수행
// 나누는 수에 log 붙여주면 된다
// n 보다 빠르다
// n / 2 회
return sum //1회
// 총 n/2 + 2 = O(logN)
}
나의 회고 🤫
코테 준비하면서 시간 복잡도 생각하기!!
코드가 짧은게 좋느냐, 시간이 짧은게 좋느냐 가 항상 딜레마인데, 한쪽이 너무 우세하다면 그 쪽으로 코딩하기!