linear data structure
동적 배열
배열의 문제 : 처음에 배열을 선언할 때 배열의 크기를 지정해야 하며, 그 이상의 자료를 집어넣을 수 없다는 점이다. -> 그래서 동적 배열이 고안됨 동적 배열은 대게 언어의 표준 라이브러리에 포함되어 있으므로, 배열의 특성을 그대로 이어받음
배열 특성
- 원소들은 메모리의 연속된 위치에 저장됨
- 주어진 위치의 원소를 반환 혹은 변경을 O(1)로 함
동적 배열 특성
- 배열의 크기를 변경하는 resize 연산이 가능, 배열의 크기 N에 비례하는 시간이 걸림
- 배열의 맨 끝에 원소 추가하는 append 연산 가능, 상수 시간이 걸림
- 동적 배열의 크기를 바꿔야 할 때는 새 배열을 동적으로 할당받은 뒤, 기존의 원소복사하고 새 배열을 참조
- append는 처음부터 여유분의 메모리를 할당받기 때문에 상수시간에 구현 가능
- 그러나 용량이 다차서 재할당 받을 때는 O(N+M)이 됨
- 재할당 받을 때마다 늘어나는 용량을 현재 원소의 개수에 비례해서 확보
- 결국 o(1)임
연결 리스트
배열 원소들의 순서를 유지하면서 임의의 위치에 원소 삽입, 삭제는 시간이 오래 걸림 - O(N) 특정 위치에서의 삽입과 삭제를 상수 시간에 할 수 있는 “연결리스트” 고안 연결 리스트에서 i번재 노드를 찾아내려면 리스트의 길이에 선형 비례
Written on 2016 May, 10