(우측으로 갈 수록 효율⬇️😞)
- 상수시간
: 입력 데이터에 관계 없이 일정
ex) stack -push/pop
- 로그 시간
: 데이터의 로그에 비례해 알고리즘의 단계가 늘어날 때, 알고리즘이 로그 시간으로 실행
(연산이 한 번 실행될 때 마다 데이터의 크기가 절반 감소, 지수가2)
ex)이진트리
- 선형 시간
: 데이터의 크기가 커지는 만큼 같은 비율로 늘어남
ex)for문
- 선형 로그 시간
:로그 시간 복잡도와 선형 시간 복잡도를 곱한 만큼커짐
(입력 데이터가 많아질수록 처리 시간이 로그 배만큼 더 늘어남)
ex)퀵 정렬(Quick Sort),병합 정렬(Merge Sort),힙 정렬(Heap Sort)
- 2차시간 , 다항
:알고리즘의 복잡도는 n의 제곱에 정비례
ex)삽입 정렬(Insertion Sort), 버블 정렬(Bubble Sort), 선택 정렬(Selection Sort), 이중 for 문
- 지수시간
: 최악의 시간 복잡도로 주로 재귀적으로 수행하는 알고리즘
ex)피보나치 수열, 재귀가 역기능할 경우
//ex01 => Number constant space => O(1)
const sum = (array) => {
let total = 0; //number
for (let i = 0; i < array.length; i++) {
total += array[i]; // number
}
return total;
};
//ex02 => Array 배열이 커질 수록 return되는 new Array 커짐 O(n)
const double = (array) => {
let newArr = []; // array 입력 값에 따라 배열의 크기가 커지게됨
for (let i = 0; i < array.length; i++) {
newArr.push(array[i]);
}
return newArr; // n numbers
};