📜 CS/알고리즘

[알고리즘] 배열과 오브젝트의 성능평가

하나둘세현 2024. 8. 1. 01:26
728x90

🤓 선수 지식으로는 빅오 표기법의 개념이 필요하다.

(빅오 표기법: https://recordoftheday.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B9%85%EC%98%A4%ED%91%9C%EA%B8%B0%EB%B2%95)

 

객체의 빅오 표기

객체는 언제 사용하냐

  • 정렬의 필요가 없을때
  • 빠른 접근, 입력과 제거를 원할
function addUpTo(n) {
  let total = 0;
  for (let i = 1; i <= n; i++) {
    total += i;
  }
  return total;
}

 

빅오의 객체 표기

  • 입력 - O(1)
    • 객체에 키와 값을 추가하는 빅오 표기
  • 제거 - O(1)
    • 객체의 키를 제거하기 위한 빅오 표기
  • 탐색 - O(n)
  • 접근 - O(1)
    • 객체의 키에 접근하기 위한 빅오 표기

탐색은 희귀하지만, O(N)은 N에 따라서 자린 선형시간이다.

 

빅오의 객체 메서드

  • Object.keys - O(N)
  • Object.values - O(N)
  • Object.entries - O(N)
  • hasOwnProperty - O(1)

객체가 커질수록, 객체안에 저장되어 있던 데이터를 다루는 keys, values, entires와 같은 메서드들이 있다.


배열안에서 데이터 접근이 느린이유 🤨

배열에서 가장 중요한 점은 무엇일까? 

👉🏻 정렬이 되어있다. (데이터가 정렬되어 있는 기준이있다.)

그렇다면 객체는? (객체는 뭉쳐있다. 🌫️)

 

배열을 언제 사용하냐

  • 순서를 정하고 싶을 때
  • 입력과 제거를 할때
  • 성능을 빠르게 할때

배열의 빅오표기법

  • 접근 - 어디에 입력하는지에 따라 달렸다.
  • 제거 - 어디에 입력하는지에 따라 달렸다.
  • 탐색 - O(N)
  • 접근 - O(1)
let names = ['Michael', 'Melissa', 'Andrea'];
let values = [true, [], [], 2, 'awesome'];

 

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

✅ 배열은 정렬되어 있지만, 끝에 추가/제거 작업이 시작에 추가/제거하는 작업보다 훨씬 빠르다.

        → why? 시작에 넣거나 빼면 처음부터 끝까지 영향을 받으면서 전부 인덱스를 다시 정리해야하기 때문

 

728x90