[Java Script 개념]

Big O of Arrays

ho-bolt 2022. 10. 18. 10:34

😁 배열에서의 Big O

배열의 기능에 따른 속도

  • 삽입 : 내용에 따라..
  • 제거 : 내용에 따라.. 다르다
  • 검색 : O(N)
  • 접근 : O(1)

접근이 O(1)인 이유는 배열에서는 인덱스가 있기 때문에 인덱스로 바로 접근이 가능하기 때문에 O(1)이다.
그러나 삽입은 다르다.

삽입과 제거

let fruits = [ "apple", "banana", "pineapple"] 
                0         1         2 

위와 같은 배열이 있다고 하자 만약 배열의 맨 끝에 "orange"를 추가한다면 똑같이 O(1)시간이 든다.
그러나 배열의 앞이나 중간에 입력했을 때가 문제이다.

let fruits = ["orange" "apple", "banana", "pineapple"] 
                          0         1         2 

이렇게 추가됐을 시 인덱스가 엉망이 되고 바로잡기 위해서는 인덱스를 다 옮겨주어야 한다.
위와같이 엘리먼트가 몇개 없다면 오래걸리지 않겠지만 많으면 많을 수록 시간은 많이 걸릴 것이다.
따라서 앞에 추가한다면 O(N)이다. 크기에 따라 시간이 오래걸리기 때문이다.
제거도 마찬가지이다.

🍳 검색

검색의 경우도 마찬가지로 O(N)이다. 왜냐하면 만약 apple을 찾고자 한다면 요소를 처음부터 하나씩 뒤져본다.
즉 엘리먼트가 많아질수록 걸리는 시간이 오래걸리기 때문에 O(N)이다.

🧇 Big O of Array Operations

  • push : O(1)

  • pop : O(1)

  • shift : O(N)

  • unshift : O(N)

  • concat : O(N)

  • slice : O(N)

  • splice : O(N)

  • sort :O(N*logN)

  • forEach/map/filter/reduce/etc - O(N)

🥩 객체와 배열의 차이점

  • 객체는 거의 모든 것을 빠르게 하지만 정렬되어 있지 않음
  • 배열은 정렬되어 있지만 끝에 추가 및 제거하는 작업이
    시작에 추가,제거하는 것보다 빠르다.
728x90