Storing Elements in a Row

What Arrays Are Good For


한 배열에 서로 다른 작업을 차례로 쌓으면 인덱스 접근과 끝 추가의 작은 비용, 가운데 삽입과 삭제의 이동 비용이 같은 기록에서 드러난다.

인덱스 접근주소 계산 뒤 한 칸을 읽어 Θ(1)이다.
끝 추가내부 배열에 빈 칸이 있으면 이동 없이 한 칸을 쓴다.
가운데 변경위치 i부터 뒤쪽 원소를 옮기므로 최악의 경우 Θ(n)이다.

get은 한 칸에 도달하고 삽입·삭제는 뒤쪽 원소 수만큼 옮긴다

모든 연산은 같은 배열 상태에서 이어진다. 실행 직후 바뀐 칸과 이동한 칸, 정확한 작업 수가 함께 기록된다.

초기 상태는 원소 5개와 빈 칸 5개다.
칸 10개를 확보한 배열이다. 초록 테두리는 방금 직접 읽거나 쓴 칸, 초록 점선 칸은 한 칸씩 옮겨진 원소, 회색 점선 칸은 빈 칸이다.

get은 배열 길이와 무관하게 한 칸에 도달한다. 삽입은 a[i]부터 끝까지의 원소 수, 삭제는 a[i] 뒤의 원소 수가 이동 수다.

연산마다 작업 수가 실행 당시의 n과 i로 정해진다

위 절의 배열 상태와 실행 기록을 그대로 쓴다. 각 행은 실행 당시 n과 i로 계산한 작업 수를 보존한다.

순서연산계산직접 읽기원소 이동배열 쓰기
0초기 상태n = 5000
직접 작업0

원소 이동을 뺀 읽기와 쓰기를 센다. get의 읽기, 새 값 쓰기, 삭제할 값 읽기와 끝 칸 비우기가 여기에 들어간다.

구조를 바꾸는 이동0

가운데 삽입과 삭제에서 원소를 한 칸씩 옮긴 횟수다.

아직 실행한 연산이 없어 두 비용이 모두 0이다.