Algorithm

배열(Arrays)과 객체(Objects)의 성능 평가

주인장 꼬비 2022. 7. 9. 19:02

Objects

const instructor = {
    firstName = "Kelly",
    isInstructor = true,
    favoriteNumbers = [1,2,3,4];
}

 

Objects 의 Big O

Insertion(삽입) - O(1)

Removal(삭제) - O(1)

Searching(탐색) - O(n)

Access(접근) - O(1)

 

객체는 정렬되어 있을 필요가 없을때 잘 작동하며, 

빠른 접근, 입력과 제거를 원할 때 좋다.

 

여기서 말하는 탐색은 key를 말하는 것이 아니라, 어떤 특정한 정보가 어떤 값에 있는지 확인하는 것을 뜻한다.

(firstName을 찾는 것이 아니라는 뜻이다.)

 

이때 모든 아이템에 모든 속성을 확인해야 한다.(풀스캔)

 

Object Methods 의 Big O

Object.keys - O(N)

Object.values - O(N)

Object.entries - O(N)

hasOwnProperty - O(1)

 

instructor.hasOwnProperty("firstName")

-> instructor라는 객체에 firstName이라는 속성이 있는지 확인하는 메서드 = O(1) 로 정리

 

 

Arrays

배열은 대부분 정렬되어 있는 데이터를 위해서 사용한다.

정렬이 필요없다면 배열을 사용하지 않는게 좋다.

 

Arrays 의 Big O

Insertion - 어디에 Insertion을 하는지에 따라 다름

Removal - 어디를 Removal을 하는지에 따라 다름

Searching - O(N) (선형 시간 (Linear time))

Access - O(1)

 

Insertion -> 배열의 앞에 Insert 할 경우 O(N) 이다. 

(인덱스를 제일 앞부터 새로 배정해줘야 하기 때문에)

Removal 도 마찬가지로 어디에 작업을 하느냐에 따라 달라진다.

 

push 와 pop 하는 작업은 배열의 끝에서 이뤄지는 작업이라 O(N)만큼 걸리지않는다.

 

 

배열을 정렬하는 것은 O(N) 보다 크다...! (비교 + 이동)

 

 

정리 

- 객체는 거의 모든 것을 더 빠르게 하지만, 정렬이 되어있지 않다.

- 배열은 정렬되어 있지만, 끝에 추가하고 제거하는 작업만 빠르고, 나머지는 비교적 빠르지 않다.

 

 

본 내용은 작성자가 (Udemy) JavaScript 알고리즘 & 자료구조 마스터클래스 강의를 듣고 정리 및 메모한 내용입니다.  오역 및 오개념이 있을 수 있으니 바로잡기 위해 문제가 있는 경우 댓글 남겨주시면 매우 감사하겠습니다.

https://www.udemy.com/course/best-javascript-data-structures/

 

JavaScript (JS) Algorithms and Data Structures Masterclass

정렬, 리스트, 힙 스택을 포함한 12개의 알고리즘과 10개 이상 자료구조 학습으로 기술 면접 완벽하게 대비!

www.udemy.com