반응형

Javascript에서 배열과 객체는 자주 사용되는 데이터 구조입니다. 이 글에서는 배열과 객체의 성능을 빅오 표기법(Big O Notation)을 통해 비교하고, 배열의 시작 부분에 요소를 추가하는데 비용이 많이 드는 이유와 내장 메서드의 런타임 성능을 분석합니다.

 

객체의 빅오 표기법

객체는 정렬되지 않은 데이터 구조로, key-value 쌍으로 저장됩니다. 객체는 정렬이 필요 없을 때, 빠른 접근, 입력, 제거를 원할 때 유용합니다.

객체의 빅오

  • 삽입: O(1)
  • 삭제: O(1)
  • 탐색: O(N)
  • 접근: O(1)

내장 메서드의 빅오

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

배열의 빅오 표기법

배열은 정렬된 데이터 구조로, 특정 위치에 요소를 추가하거나 제거할 때 성능 차이가 발생합니다.

 

배열의 빅오

  • 삽입:
    • 끝에 추가하면 O(1)
    • 앞에 추가하면 O(N) (모든 인덱스를 재정렬해야 하기 때문)
  • 삭제:
    • 끝에 추가하면 O(1)
    • 앞을 삭제하면 O(N) (모든 인덱스를 재정렬해야 하기 때문)
  • 탐색: O(N)
  • 접근: O(1)

내장 메서드의 빅오

  • push: O(1)
  • pop: O(1)
  • shift: O(N)
  • unshift: O(N)
  • concat: O(N)
  • slice: O(N)
  • splice: O(N)
  • sort: O(N * log N)
  • forEach/map/filter/reduce: O(N)

배열의 시작 부분에 요소를 추가하거나 제거하는 작업은 배열의 모든 요소를 이동시켜야 하므로 O(N)의 시간이 소요됩니다. 반면, 배열의 끝에 요소를 추가하거나 제거하는 작업은 O(1)로 더 효율적입니다. 따라서, 비어있는 배열을 제외하고는 push()와 pop()이 shift()와 unshift()보다 항상 빠릅니다.

반응형

'Algorithm > Theory' 카테고리의 다른 글

재귀 (Recursion)  (0) 2024.07.08
문제 해결 패턴 연습 문제  (0) 2024.07.01
문제 해결 패턴  (0) 2024.06.28
문제 해결 접근법  (0) 2024.06.27
빅오 표기법 (Big-O Notation)  (0) 2024.06.26
얼은펭귄