객체의 빅오(Big o)

1. 객체의 빅오

let user = {
	name: 'lee',
    isAdult: true,
    favorite: ['coding','riding']
};

위 객체는 user라는 변수에 key, value 3가지를 저장하고 있다.

객체는 정렬되어 있을 필요가 없을때 잘 작동하며, 빠른 접근, 입력과 제거를 원할 때 좋다.

빠르다고 하면 얼마나 빠른가?

입력 - o(1)
제거 - o(1)
검색 - o(N)
접근 - o(1)

시작과 끝이 없기 때문에 어디에 새로운 객체를 입력해도 상관이 없다.

단지 key를 사용해서 추가하는 것이죠.

 

객체는 위와 같이 검색을 제외하고는 상수의 시간( o(1) )을 가집니다.

 

그러나 검색은 선형 시간( o(N) )입니다.

검색은 user.name과 같은 key를 찾는 것이 아니다, 이러한 정보에 접근하는 시간은 상수 시간이다.

 

검색은 어떤 특정한 정보가 어떤 값에 있는지 확인하는 것이다.

 

예를 들면 true값이 이 객체 어디에 저장되어 있는지 알기 위해서는 먼저 user.name에 접근해 값이 무엇인지 확인합니다.

value가 'lee'라는 것을 확인하고 isAdult의 값을 확인합니다.

 

만약 키값 별로 속성이 많을수록 그만큼 걸리는 시간도 늘어납니다.

 

2. 객체의 메서드

Object.keys - o(N)
Object.values - o(N)
Object.entries - o(N)
hasOwnProperty - o(1)

keys, values, entries의 경우에는 객체에 접근해서 배열을 반환하기 때문에 아이템 개수가 늘어나면 배열에 추가해야 하는 시간이 늘어나기 때문에 o(N)의 시간 복잡도를 가집니다.

 

hasOwnProperty의 경우에는 user.hasOwnProperty('name')을 입력하게 되면 name이라는 속성이 있는지 없는지만(boolean) 알려줍니다.

 

위에서 접근은 o(1)의 시간 복잡도를 가진다고 했기 때문에 o(1)의 시간 복잡도를 가집니다.

'자료구조 | 알고리즘' 카테고리의 다른 글

배열 메서드의 Big O  (0) 2022.11.30
배열의 빅오(Big o)  (0) 2022.11.28
공간 복잡도  (0) 2022.11.24