Walking the References

Linked List Search


탐색은 현재 노드의 값과 목표값을 비교한 뒤, 일치하지 않으면 next로 이동한다. 목표를 찾거나 None에 도달하면 멈춘다.

비교와 이동current.data를 목표값과 비교하고 다르면 next로 옮긴다.
멈추는 두 경우목표를 찾거나 current가 None이 되면 멈춘다.
비교 횟수최선은 Θ(1), 마지막 노드나 없는 값은 Θ(n)이다.

탐색은 목표를 찾거나 None에 닿을 때까지 비교하고 이동한다

목표값이 리스트의 어디에 있는지에 따라 멈추는 위치와 비교 횟수가 달라진다.

연결리스트 탐색 상태현재 비교하는 노드와 이미 확인한 노드
current = headwhile current is not Noneif current.data == target: return Truecurrent = current.nextreturn False
옅은 파란 원은 비교를 마친 노드, 초록 테두리 원은 다음에 비교할 current, 초록으로 채운 원은 목표와 일치한 노드다. 아래 코드 칸에서 짙은 칸이 지금 실행하는 줄이다.
현재 상태
목표값
비교 횟수
현재 결과

목표가 뒤에 있을수록 비교 횟수가 늘고 없으면 항상 n회다

노드 수를 바꾸면 각 위치를 찾는 데 필요한 비교 횟수도 함께 바뀐다. 평균은 목표가 리스트 안의 각 위치에 같은 확률로 있다고 가정한 값이다.

막대 높이는 목표가 그 위치에 있을 때의 비교 횟수이며, 오른쪽 회색 막대는 목표가 없을 때다.
목표가 있을 때 평균 비교 횟수
노드 수

목표가 있는 경우의 평균 비교 횟수는 (n + 1) / 2이다. 목표가 없으면 항상 n회 비교한다. 첫 노드에서 찾는 최선의 경우는 Θ(1)이다. 마지막 노드나 없는 값을 확인하는 최악의 경우는 Θ(n)이다.