(Python) 리스트의 선형 탐색 (linear search)¶
정렬되지 않은 리스트에서 특정 항목을 찾으려면 어떻게 해야 할까?
이미 정렬된 리스트라면 이진 탐색(binary search)처럼 좀 더 효과적인 탐색 방법을 사용해 볼 수 있겠지만
그렇지 않다면 순차적으로 배열의 모든 항목을 검사해서 원하는 값이 있는지 찾아야 할 것이다.
선형 탐색(linear search)는 가장 기본적인 탐색 방법으로, 위에서 언급한 바와 같이
배열의 모든 항목을 검사해서 원하는 값이 있는지 찾아내는 선형 탐색 기법이다.
In [1]:
# 배열(=array)안에 찾고자 하는 특정 항목(=value)이 있으면 그 index값을 return, 없다면 -1을 return
def linear_search(value, array):
for i, item in enumerate(array):
if item == value:
return i
return -1
In [2]:
value = 1
array = [5,4,3,2,1,0]
linear_search(value, array)
Out[2]:
선형 탐색은 최악의 경우 O(n)의 시간 복잡도를 갖는다.
특정 항목이 끝에 위치해 있거나, 배열에 존재하지 않을 경우 모든 항목을 다 검사해야만 하기 때문이다.
리스트의 index()함수가 실제로 이 알고리즘을 사용하고 있다.
In [3]:
array_1 = [3,4,5,6,7,8]
print(array_1.index(3))
print(array_1.index(4))
print(array_1.index(7))
In [4]:
array_1.index(1) # 리스트 안에 존재하지 않으면 ValueError를 발생시킨다.
'알고리즘 > [Python] 알고리즘' 카테고리의 다른 글
(Python) 순열, 조합, 중복순열, 중복조합 쉽게 구현하기 (1) | 2020.03.05 |
---|---|
(Python) 버블 정렬(bubble sort) (0) | 2020.02.04 |
(Python) 이진 탐색(Binary Search) 구현하기 (0) | 2020.01.22 |
(Python) 너비 우선 탐색(BFS) 구현하기 (0) | 2020.01.13 |
(Python) 깊이 우선 탐색(DFS) 구현하기 (0) | 2020.01.10 |