Data Structure/By C++
동적 배열(Dynamic array)
JTesseract
2019. 8. 28. 15:29
동적 배열 : 자료의 개수가 변함에 따라 크기가 변경되는 배열
-메모리 상의 연속적인 공간을 할당
-동적배열은 동적으로 할당받은 배열(new를 통한)을 사용
동적배열은 배열에 비해 다음과 같은 특성을 지님
-resize() 연산 가능 - 배열의 크기를 변경하는 // 배열의 크기 N에 비례하는 시간 걸림
-append()연산 - 주어진 원소의 배열의 맨끝에 원소 추가하는
동적배열의 메모리 할당방법
-capacity메모리 정책 사용
-메모리를 할당받을 때 배열의 크기가 커질 때를 대비해서 여유분의 메모리(capacity)를 미리 할당받음
-size가 capacity를 넘어서는 경우, 기존메모리 size의 반만큼 늘리고 (결과값이 소수점이면 내림) 배열의 원소를 그쪽으로 옮김
int size; //배열의 크기
ElementType* array; //실제 배열을 가리키는 포인터
동적배열의 append() 연산 시간 복잡도
-size < capacity 경우 O(1) 걸리다가,
size = capacity 경우 재할당 연산을 수행해야 돼서 O(N+M)이 걸림 // N : 원래 원소갯수 , M : 추가 여유 공간 크기
-이를해결하기 위해서 재할당을 할때 마다 정해진 크기(상수)를 확보하는 것이 아니라, 현재 가진 원소의 개수에 비례해서 여유크기를 확보
-이런 식이면, 평균적으로 O(1)이 걸림
*제일 좋은 방법은 배열의 최종 크기를 미리 안다면, 동적 배열의 용량을 사전에 충분히 늘려둬서 재할당에 드는 비용을 없앰 ( C++의 reserver()이용해서)