•
정의
◦
가장 기본적인 데이터 구조로 인덱스와 인덱스에 해당하는 요소로 구성된다.
•
특징
◦
정적 메모리가 할당되므로 길이가 고정되어 생성된다.
◦
Random Access를 지원한다. 즉 인덱스를 통해서 각 요소에 직접 접근할 수 있다.
◦
배열은 논리적 순서와 물리적 순서가 일치한다. 각 요소들이 연속되어 메모리에 저장된다.
•
시간복잡도
조회 | 검색 | 삽입 | 제거 |
O(1) | O(n) | O(n) | O(n) |
•
용도
◦
백트래킹이나 다이내믹 프로그래밍에 주로 사용된다.
◦
정렬, 탐색, 이진 탐색이 배열을 주로 사용한다.
▪
정렬
•
Stable : merge
◦
2개 이상의 컬럼을 정렬할 때, 정렬 대상이 되는 컬럼이 아닌 것에 대해 그 순서가 유지되는 것이다.
⇒ 중복 항목의 순서가 유지된다.
•
Unstable : quick, heap
◦
2개 이상의 컬럼을 정렬할 때, 정렬 대상이 되는 컬럼이 아닌 것에 대해 그 순서가 유지되지 않는 것이다.
⇒ 중복 항목의 순서가 유지 되지 않는다.
•
이는 공간복잡도와도 연관이 있다.
◦
탐색과도 연관이 있다.
▪
정렬되어 있지 않은 배열의 특정 값을 찾는 경우 O(n)의 시간복잡도를 가진다.
▪
정렬되어있을 경우, 이진 탐색이 가능하므로 O(log n)의 시간복잡도를 가진다.
•
Dynamic Array란?
◦
Array의 경우, size가 고정되어있는 자료구조이기 때문에 size보다 많은 갯수의 data가 추가 되면 저장할 수 없다.
◦
Dynamic Array는 저장공간이 가득 차게 되면 리사이징하여 유동적으로 크기를 조절하여 데이터를 저장하는 자료구조다.
◦
일반적으로 dubbling 기법을 사용해 자동적으로 리사이징한다.
▪
2의 n 제곱만큼 사이징을 늘린다. 이렇게 해야 추가 시 발생하는 리사이징 연산이 시간복잡도에 영향을 끼치지 않는다.
◦
size를 넘지 않는 데이터 추가에 대해서는 O(1), 넘어서는 데이터 추가에 대해서는 resize 연산이 O(n)인데 이를 amortized O(1)이라고 부릅니다