시간 복잡도 키워드 : 빅오표기법/시간과 함수의 관계/상수시간/선형시간/평방시간/로그시간
시간 복잡도란 ?
빅오표기법 (BigO)
O(1) 상수시간
function 0_1 (arr, index) {
return arr[index];
}
let arr = [1,2,3,4];
let index = 1;
console.log(0_1(arr, index)) // 2
예를 들면, 항상 200개의 스탭이 필요한 함수가 있다면, 인풋 사이즈와 관계 없이 함수의 시간의 복잡도는 O(200)이 아니라 여전히 O(1)이다.여전이 constant time (일정한 시간/상수)이다. 인풋 사이즈와 관계 없이 스탭이 정해진 알고리즘이다.
O(n) 선형시간
// O_N(n)에서 n의 시간이 걸리고, another_0_n(n)에서 2n의 시간이 걸린다. 총 3n이 걸리지만, 빅오표기법에서는 계수의 크기에 상관없이 O(n)으로 표현한다. 다른 알고리즘이 추가되어 3n+1같은 시간이 걸려도 상수를 무시하고 O(n)로 표현한다.
function 0_n(n) {
for (let i=0; i<n; i++) {// do sth}
}
function another_0_n(n) {
for (let i=0; i<2n; i++) {// do sth}
}
O(n²) 평방시간
예를 들어 20개의 데이터는 400개의 스탭이 될 것이다.
function algorithm(n) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
for(let k = 0; k < n; k++){
// do something
}
}
}
}
O(log N) 로그시간
로그의 예시
32의 밑이 2인 로그는 무엇일까. 32을 2로 몇 번을 나눠야 1일 나올까? 32/2=6 16/2=8
8/2=4 4/2=2 2/2=1. 32의 밑이 2인 로그는 5이다.
결론, 알고리즘의 시간복잡도를 인풋과 연관하여 빠르게 알아낼 수 있다.
reference
https://velog.io/@ghwnd6448/%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84
https://www.youtube.com/watch?v=BEVnxbxBqi8
http://www.ktword.co.kr/test/view/view.php?m_temp1=6146