파이썬 순차탐색 알고리즘 sequential search #7
안녕하세요.
오랜만에 파이썬을 이용한 알고리즘 학습 포스팅을 합니다.
이번 챕터는 매우 심플! 매우 간단! 한 알고리즘입니다.
리스트에 값이 있고, 원하는 값을 첫 번째 자료부터 비교하면서 그 위치 값을 리턴해주는 알고리즘입니다.
순차 탐색이라고 하고, sequential search라고 영어로는 표현하면 되겠습니다.
바로 그럼 시작해 보겠습니다.
위 그림처럼 처음부터 18을 찾아 헤매기 시작합니다.
그렇게 번지수 2번에 도착하여 18을 찾아 해당 값을 리턴하고,
만약 끝까지 찾지 못하였다면 -1을 리턴하는 알고리즘입니다.
파이썬으로 표현해 보겠습니다.
# 리스트에서 특정 숫자 위치 찾기
# 입력: 리스트 a, 찾는 값 x
# 출력: 찾으면 그 값의 위치, 찾지 못하면 -1
def search_list(a, x):
n = len(a) # 입력 크기 n
for i in range(0, n): # 리스트 a의 모든 값을 차례로
if x == a[i]: # x 값과 비교하여
return i # 같으면 위치 돌려줍니다.
return -1 # 끝까지 비교해서 없으면 -1을 돌려줍니다.
v = [17, 92, 18, 33, 58, 7, 33, 42]
print(search_list(v, 18)) # 2(순서상 세 번째지만, 위치 번호는 2)
print(search_list(v, 33)) # 3(33은 리스트에 두 번 나오지만 처음 나온 위치만 출력)
print(search_list(v, 900)) # -1(900은 리스트에 없음)
자 , 그럼 이 순차 알고리즘으로 원하는 값을 찾으려면 비교를 몇 번 해야 할까요? 아마, 찾으려는 숫자가 어디에 있느냐에 따라 다르겠죠?
만약 10개의 값이 담겨있는 리스트에서 없는 숫자를 찾으려면 10번 비교를 하고 나서 -1을 리턴할 것입니다. 반대로 어떤 값을 찾을 때 그 값이 리스트의 0번지에 있다면? 한 번의 비교로 값을 찾아낼 수도 있고요.
이런 상황에서 우리는 계산 복잡도를 어떻게 구 할 수 있을까요? 이처럼 변수에 따라 계산 횟수가 달라지는 이런 상황에서는 최선의 경우와, 평균적인 경우, 그리고 최악의 경우로 나누어 생각해 보기도 합니다.
따라서 보수적인 관점에서 이 알고리즘의 계산 복잡도는 n번의 계산이 필요하며, 계산복잡도 O(n)이라고 표현할 수 있습니다.
DB적인 관점에서 보았을 때 이 알고리즘은 정렬되어 있지 않기 때문에 full scan을 하는 방법이라고 표현할 수 있습니다.
다음 시간에는 정렬에 관한 알고리즘을 배워보도록 하겠습니다.
감사합니다.
by.sTricky
'DB엔지니어가 공부하는 python' 카테고리의 다른 글
파이썬 상권분석 실습# 상가(상권)데이터를 이용한 데이터 분석 #1 (16) | 2020.02.28 |
---|---|
파이썬 삽입정렬 알고리즘 Insertionsort #8 (2) | 2020.02.27 |
[python_상가(상권)정보DB가지고놀기]공공데이터포털 에서 상가(상권)정보DB 다운 받아 DB에 insert 하기 (4) | 2020.02.24 |
[python 데이터분석]파이썬으로 로또 당첨번호 및 당첨금 데이터 분석 하기 feat.pandas, pyplot (26) | 2020.02.13 |
파이썬 재귀호출 알고리즘 하노이의 탑 옮기기 #6 (4) | 2020.02.11 |