동적 배열

hyeo71·2023년 9월 20일
0

자료구조

목록 보기
4/5

동적 배열 추가 연산 시간 복잡도

추가 연산(append operation): 배열의 가장 끝에 새로운 값을 넣는 것

동적 배열은 내부적으로는 정적 배열을 사용

정적 배열이 남는 공간이 있을 경우(1)와 정적 배열이 다 찼을 경우(2)가 있다.

  1. 남는 공간 중 가장 앞 쪽에 데이터 저장 => O(1)

    • 사용 중인 배열보다 두 배 큰 메모리를 예약
    • 기존 데이터를 새로운 배열로 복사
    • 새로운 데이터를 추가
      => O(n)

특정 인덱스에 접근하는 것은 O(1)이지만 이를 n번 수행하기 때문에 O(n), 데이터를 저장하는데 O(1) 따라서 총 O(n+1)이지만 1은 생략

분할 상환 분석(Amortized Analysis)

시간 복잡도는 최악의 경우를 고려하여 정하지만 위 동적 배열 추가 연산처럼 여러 경우 중 상대적으로 2번보다 1번이 일어날 확률이 크지만 시간 복잡도는 2번을 고려하는 비합리적인 상황을 대비하여 시간 복잡도를 조금 다르게 계산하는 방법

한단어로 저장하면 할부
최악을 가정하지 않고 평균을 내 계산하는 방법

  • 같은 동작을 n번 했을 때 드는 시간이 x일 때
    동작을 한번 하는데 걸린 시간은 x/n

동적 배열 삽입 연산(Insert Operation)

  • 정적 배열에 남는 공간이 있을 때
    삽입할 인덱스부터 마지막 데이터 인덱스의 값을 하나씩 뒤로 옮긴다.(O(n))
    데이터를 저장한다.(O(1))
    O(n+1) => O(n)
  • 정적 배열에 남는 공간이 없을 때:
    기존의 두 배 크기의 배열로 데이터를 복사한다.(O(n))
    삽입할 인덱스부터 마지막 데이터 인덱스의 값을 하나씩 뒤로 옮긴다.(O(n))
    데이터를 저장한다.(O(1))
    O(2n+1) => O(n)

동적 배열 삭제 연산

  • 특정 위치의 데이터를 삭제할 때
    특정 위치의 뒤에 있는 데이터를 하나씩 앞으로 옮긴다.(O(n))
  • 가장 뒤에 있는 데이터를 삭제할 때(pop 연산)
    O(n)

0개의 댓글