Dynamic Array란?

2023. 6. 24. 00:26·CS 공부/자료구조

배경

※ Static Array의 한계점을 보안하기 위해..

 

Array의 경우 size가 고정되었기 때문에 선언시에 설정한 size보다 많은 데이터를 저장할 수 없다. (Static Array의 한계점)

이를 보안하기 위해 저장공간이 가득 차게되면 resize하여 유동적으로 array의 size를 조절할 수 있는 자료구조가 나왔다.

이를 Dynamic Array라 한다. 

 

 

Resize란?

  1. 데이터를 계속 추가하다가 기존에 할당된 메모리를 초과하였다.
  2. size를 늘린 배열을 선언한다.
  3. 그곳으로 모든 데이터를 옮긴다.
  4. 늘어난 크기의 size를 가진 배열이 된다. 이로써 새로운 데이터를 저장할 수 있게 된다. 

-> 데이터를 추가하다가 한계가 도달하는 시점에 더 큰 배열을 선언하여 모든 데이터를 그곳으로 옮긴다. 

따라서, size를 미리 고민할 필요가 없다는 장점이 있다. 

 

 

Doubling (Resizing 방식 중 하나)

- Resizing을 하는 방법은 여러가지가 있는데, 기본적으로 Doubling 방식(기존 array size의 2배 size를 할당하는 방식) 이 있다. 

- 데이터를 마지막 인덱스에 추가하는 O(1), size를 넘어설 때는 size를 두배 늘리고 데이터를 일일히 옮기는 과정 O(n) 발생한다. 

 

※ 시간복잡도는 O(1)? O(n)? 

- 가끔 발생하는 O(n)의 resize하는 시간을, 자주 발생하는 O(1)의 작업들이 분담해서 나눠 가짐으로써 전체적으로 O(1)의 시간이 걸린다고 생각하면 된다.

- 분할상환 시간복잡도(Amortized time complexity)를 사용하여 amortized O(1) 이라고 한다. 

 

 


 

장/단점

 

Static Array와 비교했을 때,

- 이를 보안해주는 자료구조로써 size를 고민하지 않고 유동적으로 조절할 수 있다.

 

Linked List와 비교했을 때,

- 데이터 접근이 빠르다.

- 맨 뒤에 데이터를 추가/삭제하는 것이 빠르다.

 

등의 장점이 있지만 

 

Linked List와 비교했을 때,

- 중간 데이터를 추가/삭제시 뒤에 있는 데이터들을 모두 shift해야하는 비용이 든다.

- resize할 때, 예상치 못하게 현저히 낮은 performance가 발생한다.

- resize에 시간이 만힝 걸리므로 필요한 것 이상 메모리 공간을 할당받게 될 수도 있어 메모리공간 낭비가 발생한다.

 

등의 단점이 있으므로 상황에 맞게 자료구조를 고려하여 선택해야한다. 

'CS 공부 > 자료구조' 카테고리의 다른 글

여러 종류의 트리(Tree) 정리 (이진 트리, 전 이진 트리, 완전 이진 트리, 포화 이진 트리, 이진 탐색 트리)  (0) 2023.08.09
힙(Heap)이란?  (0) 2023.08.09
원형큐(Circular Queue)란?  (0) 2023.08.07
Queue & Stack  (0) 2023.06.24
Array vs Linked List  (0) 2023.06.24
'CS 공부/자료구조' 카테고리의 다른 글
  • 힙(Heap)이란?
  • 원형큐(Circular Queue)란?
  • Queue & Stack
  • Array vs Linked List
횰쓰
횰쓰
개발 성장 블로그입니다
  • 횰쓰
    횰쓰토리
    횰쓰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS 공부
        • 운영체제
        • 네트워크
        • 컴퓨터구조
        • 데이터베이스
        • 알고리즘
        • 소프트웨어공학
        • 자료구조
        • 웹
      • 프로그래밍
        • Python
        • NodeJS
      • 프로젝트
        • React 프로젝트
      • 개발도구
        • Git
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    경쟁상태(Race Condition)
    Max힙
    포화이진트리
    멀티 프로세스
    운영체제
    Min힙
    카드뭉치
    이진탐색트리
    최태성인강
    RB Tree
    chrome
    자가균형 이진탐색트리
    리스트정렬여부
    4 way handshake
    SQL/NOSQL
    전이진트리
    한국사능력검정시험 심화
    프로세스 주소공간
    Git
    Push-force
    둘만의 암호
    RB트리
    멀티 스레드
    3 Way Handshake
    페이지 교체
    AVL트리
    큐
    tcp
    스택
    Sync/Async
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
횰쓰
Dynamic Array란?
상단으로

티스토리툴바