빅오 표기법(Big O notation)-2

호떡집사·2024년 8월 23일

알고리즘

목록 보기
2/8
post-thumbnail

Object와 Big O‹with.js›

Object는 순서가 없다(unordered list) 오로지 key🔑를 통해서 접근 및 추가!

  • 정렬이 필요 없을 때
  • 빠른 접근,추가,삭제

✔️ Object의 추가,삭제,접근,탐색

  1. Insertion(추가) - O(1)

  2. Removal(삭제) - O(1)

  3. Searching(탐색) - O(N)

    • 객체의 프로퍼티를 전부 순회해서 값을 확인해야 하기 때문에 linear time O(N)
  4. Access(접근) - O(1)

✔️ Object Method

  1. Object.keys - O(N)
  2. Object.values - O(N)
  3. Object.entries - O(N)
  4. object.hasOwnProperty(key) , Object.hasOwn(object,key)- O(1)

const exObject = {
  one : 1,
  two : 2,
  three : 3,
  isTrue : true,
  isFalse : false,
}

// Object의 크기가 커질 수록 method가 처리하는 연산이 커짐 O(N) 
console.log(Object.keys(exObject)); 
// key 배열 return [ 'one', 'two', 'three', 'isTrue', 'isFalse' ]

/* Objects.valuse, Object.entires  
또한  Object.keys와 마찬가지인 이유로 object의 요소가 늘어날수록 연산이 커짐 O(N) */
console.log(Object.values(exObject)); 
// value 배열 return [ 1, 2, 3, true, false ]

console.log(Object.entries(exObject)); 
/* [key-value]쌍의 배열
[
  [ 'one', 1 ],
  [ 'two', 2 ],
  [ 'three', 3 ],
  [ 'isTrue', true ],
  [ 'isFalse', false ]
]
*/

/* Object.hasOwnProperty(key) , Object.hasOwn(object,key)
-> object의 내부 key값 존재 유무 정해진 값을 받아 boolean type으로 return => O(1) */
console.log(exObject.hasOwnProperty('one'));//true
console.log(exObject.hasOwnProperty(1));//false (key기준)
console.log(Object.hasOwn(exObject,'two'));//true

Array와 Big O‹with.js›

  • ordered list
  • 순서가 정해져 있기 때문에 연산에 시간이 더 걸릴 수 있다.
  • 배열에 있는 데이터를 접근하는 것은 빠름,
  • 정렬될 필요가 있는 데이터 및 정렬 되어 있는 데이터 보관 유리

✔️ Array의 추가,삭제,접근,탐색

  1. Insertion(삽입)
  • 맨 앞: O(N) => 요소들이 하나씩 뒤로 밀리며 index 재정렬 필요
  • 맨 뒤: O(1)
  1. Removal(삭제)
  • 먠 앞, 중간 추가: O(N) => index 재정렬 필요
  • 맨 뒤: O(1)
  1. Searching(검색) - O(N)
  2. Access(접근) - O(1)

✔️ Array Method

  1. push , pop - O(1)
    : index를 이용하여 접근하는 것과 동일, constant time, 빠름
  1. shift - O(N)
    : reindex 필요

  2. unshift - O(N)
    : reindex 필요

  3. concat - O(N)
    : 병합 할 배열의 크기가 커질 수록 오래 걸림

  4. slice - O(N)
    : 배열 전체 또는 일부를 copy하지만 copy할 배열의 길이에 따라 다름

  1. splice - O(N)
    : elem 제거 및 추가-O(N)

  2. sort - O(N logN)

  3. forEach(),map(),filter(),reduce() 등등 - O(N)

profile
성장하는 Front-End 개발자를 목표로!(✿◡‿◡)

0개의 댓글