Same List, Different Costs

Arrays vs Linked Lists


같은 List 인터페이스의 get, add, remove도 내부 표현이 배열인지 연결리스트인지에 따라 실행하는 일과 연산 비용(operation cost)이 달라진다. 배열은 원소 이동이, 연결리스트는 위치를 찾는 순회가 비용을 지배한다.

ArrayStack내부 배열에 원소를 연속으로 두고 n과 용량을 따로 센다.
SLList · DLList노드마다 next, 또는 prev와 next를 두어 순서를 연결한다.
비용을 읽는 순서어떤 연산인지, 내부에서 무엇을 하는지, 몇 번 반복하는지 센다.

get(i)는 배열에서 계산 한 번, 연결리스트에서 순회다

표현과 위치 i를 바꾸면 i번째 값에 닿기 위해 거치는 칸과 반복 횟수가 바뀐다. 원소는 n = 8개다.

칸 하나가 원소 하나다. 파란 칸은 접근하면서 거친 원소, 초록 테두리 칸은 목표 i번째 원소다. 연결리스트의 화살표는 따라간 참조의 방향이다.

add(i, x)는 배열에서 원소 이동이, 연결리스트에서 순회가 비용을 정한다

삽입 위치 i를 바꾸면 ArrayStack이 옮기는 원소 수와 SLList·DLList가 위치를 찾기 위해 지나는 노드 수가 바뀐다. 원소는 n = 8개이고 용량은 충분하다.

막대 길이는 표현별 주된 반복 횟수다. ArrayStack은 옮기는 원소 수, SLList는 i − 1번째까지 따라가는 노드 수(끝 삽입은 tail로 바로 접근), DLList는 가까운 끝에서 따라가는 노드 수이며, 초록 막대가 가장 적다.