Data Structure

배열(array)

Reife 2023. 2. 15. 13:57

배열(array): 특정 크기만큼의 연속된 메모리 공간을 할당받는 자료형

 

배열의 특성

c언어 기준

  • 자료형을 지정하고 선언
  • 한 번 공간 크기가 정해지면 변경 불가
  • 정수형 int로 배열을 선언할 때, 데이터의 사이즈는 컴파일러와 프로세서의 구조에 따라 다름
  • int형은 과거에는 2바이트였다가 현재 32비트 이상의 시스템에서는 4바이트로 변경됨
  • 배열의 각 엘리먼트의 주소는 사용된 자료형의 크기만큼 증가
  • 배열은 특정 엘리먼트의 위치를 O(1)에 조회 가능
    배열의 크기가 얼마나 늘어나든 조회 속도에는 변함 X
    배열의 시작 주소에 (인덱스 x 자료형 크기)를 더해주면 해당하는 배열의 주소를 쉽게 계산할 수 있기 때문

 

현실적으로 데이터의 크기를 정확히 예상하기 어렵다. 미리 할당해놓은 공간이 너무 작거나 클 수 있다.
이 문제를 해결하기 위해 배열의 크기를 필요에 따라 변경하는 동적배열이 등장했다.
파이썬의 리스트가 이에 해당한다.

 

 

 

동적배열의 특성

  • 작은 공간으로 시작해서 공간이 부족할 때마다 크기를 키워서 재할당하는 방식
  • 재할당하는 비율: 그로스 팩터(Growth Factor, 성장인자) - 언어마다 상이
    더블링(Doubling): 성장인자 = 2
  • 파이썬의 그로스 팩터: 초반에는 2에서, 점차 1.125로 수렴

 

단순히 기존의 공간을 늘리는 것이 아니다.

더 큰 크기의 새로운 공간을 할당하고, 기존의 데이터를 복사하는 것이다. 따라서 O(n)의 시간복잡도를 띈다.
그러나 "최악의 경우의 평균적인 성능"을 구하는 분할 상환 분석에 따르면 O(1)이다.

 


References

파이썬 알고리즘 인터뷰 - 박상길 저
TCP School - 1차원 배열