배열과 오브젝트의 성능 평가

소히·2022년 7월 13일
0

알고리즘study

목록 보기
2/5
post-thumbnail

객체는 정렬되어 있을 필요가 없을 때 잘 작동한다.
그리고 빠르게 접근, 입력과 제거를 원할 때 좋다.

Big O of Object

Insertion : O(1)
Removal : O(1)
Searching : O(N)
Access : O(1)

Big O of Object Methods

아래와 같은 객체가 있다고 가정해보자.

let instructor = {
  firstName : "sarah",
  isInstructor : true,
  favoriteNum : [1,2,3,4]
}
Object.keys(instructor) 
// ["firstName", "isInstructor", "favoriteNum"]
Object.values(instructor)
// ["sarah", true, Array(4)]
Object.entries(instructor)
// [Array(2), Array(2), Array(2)]
// 객체 자체의 enumerable 속성 [key, value] 쌍의 배열을 반환
instructor.hasOwnProperty("firstName")
// true
// firstName이라는 속성이 있는지 boolean타입으로 반환

배열은 정렬되어 있는 형태이다. 그래서 보통 정렬되어 있는 데이터를 위해서 사용한다. 하지만 연산하는 시간이 더 걸릴 수 있다.

Big O of Arrays

Insertion : It depends...
Removal : It depends...
Searching : O(N)
Access : O(1)

배열 끝에 요소를 추가하는 메소드인 push()를 이용할 경우 O(1)로 상수시간이다.
하지만 배열의 맨 앞에 요소를 추가하거나 제거할 경우 기존에 배열마다 가지고 있는 인덱스를 새로 배정해야 한다. 이 경우에는 O(N) 선형시간이다.

  • push와 pop작업이 shift와 unshift보다 빠르다.
    단, 비어있는 배열은 제외.

Big O of Array Operations

push : O(1)
pop : O(1)
shift : O(N)
unshift : O(N)
concat : O(N)
slice : O(N)
splice : O(N)
sort : O(NlogN)
forEach/map/filter/reduce/etc. : O(N)

✨ 객체는 거의 모든것을 더 빠르게 수행하지만, 정렬되어 있지 않다.
배열은 정렬되어 있지만, 끝에 추가하고 제거하는 작업이 시작에 추가하고 제거하는 작업보다 훨씬 빠르다.

0개의 댓글