결론 : 어떤 자료구조를 사용하는게 효율적인가, 자료구조의 동작원리를 아는것이 나중에 발생할 수 있는 문제를 예측할 수 있음
입력 데이터 크기와 상관없이 항상 일정한 시간이 걸리는 알고리즘
ex) 배열, Hash
function O_1_algorithm(arr, index) {
return arr[index];
}
데이터가 커질수록 단계 수가 늘어나므로 이진탐색은 O(1)이라 표현할 수 없음
검색하고 있는 배열의 원소 수보다 단계 수가 훨씬 적으므로 O(N)이라 표현할 수도 없음
ex) 이진탐색
function O_log_n_algorithm(n) {
let a = b = 0;
while (a < n) {
b += 1
a = a * 2
}
return b;
}
입력 데이터의 크기에 비례해서 시간이 소요되는 알고리즘
for문
function O_n_algorithm(n) {
for (let i = 0; i < n.length; i++) {
// do something
}
}
입력 데이터의 제곱에 비례해서 시간이 소요되는 알고리즘
중첩 for문
function O_quadratic_algorithm(n) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
// do something
}
}
}