순회와 i번째 접근
문제 1~4는 다음 단일 연결리스트에서 각각 따로 시작한다.
head → 12 → 5 → 17 → 8 → 30 → None def size(head):
count = 0
current = head
while current is not None:
count += 1
current = current.next
return count- size(head)의 while 반복이 몇 번 실행되고, 반복이 끝나는 조건이 무엇인지 적는다.
- 인덱스 3인 노드에 가려면 head에서 next를 몇 번 따라가야 하고, 그 노드의 값은 무엇인지 적는다.
- 배열과 연결리스트에서 전체 순회가 끝나는 조건을 각각 적는다.
- 목록의 각 원소마다 목록 전체를 다시 훑어 같은 값의 개수를 세는 작업의 비용을 적는다.
해설 펼치기
- 노드 5개를 하나씩 방문하므로 5번 실행하고, current가 None이 되면 끝난다.
- next를 3번 따라가 값 8인 노드에 도착한다. i번째에 가는 비용은 Θ(1+i)다.
- 배열은 인덱스가 원소 수 n에 도달하면, 연결리스트는 current가 None이 되면 끝난다. 배열은 경계를 수로 비교하고 연결리스트는 끝을 나타내는 참조를 확인한다.
- 순회 안에서 다시 순회하므로 n·n, 곧 Θ(n²)이다. 순회를 두 번 연속하는 것은 Θ(n)이지만 중첩하면 증가율이 바뀐다.