객체의 Big O
let instructor = {
firstName: "Kelly",
isInstructor: true,
favoriteNumbers: [1, 2, 3, 4],
}
- 이 객체 리터럴에는 instructor라는 변수에 key, value를 3개 저장하고 있음
- 객체의 사용
- 객체는 정렬할 필요가 없을 때 사용
- 빠른 접근 / 삽입 / 삭제를 요구할 때 용이함
- 이 때 빠르다는 의미는 입력, 삭제, 접근 시간이 상수 시간(O(1))이라는 의미
- 단, 객체 내 프로퍼티에 관한 값을 찾기 위한 탐색을 할 땐 O(N)의 복잡도를 가짐
- 객체 메소드들의 Big O
- Object.keys - O(N)
- Object.values - O(N)
- Object.entries - O(N)
- hasOwnProperty - O(1)
배열의 Big O
let names = ['Michael', 'Melissa', 'Andrea'];
let values = [true, {}, [], 2, 'awesome'];
- 배열의 사용
- 배열은 대부분 정렬되어 있는 데이터를 위해 사용함
- 배열은 빠른 접근(O(1))이 가능
- 배열 내 요소들을 탐색할 때는 O(N)의 복잡도를 가짐
- 단 배열의 삽입, 삭제는 배열의 위치에 따라 달라짐
- 배열의 삽입, 삭제
- 배열의 끝에 삽입, 삭제한다면(
arr.push()
) O(1)의 복잡도를 가짐
- 배열의 앞에 삽입, 삭제한다면?
- 배열 내 기존 요소들의 index가 모두 달라짐 → 모든 요소들의 인덱스를 새로 배정해야 함!
- O(N)만큼의 복잡도를 가짐
- 배열 메소드들의 Big O
- Array.push(), Array.pop() - O(1)
- Array.shift(), Array.unshift() - O(N)
- Array.concat() - O(N)
- Array.slice() - O(N)
- Array.splice() - O(N)
- Array.sort() - O(N∗logN)
- Array.forEach(), map(), filter(), reduce() etc… - O(N)