안녕하세요. 위기의 코딩맨입니다.
오늘은 이진탐색 알고리즘에 대해 알아보도록 하겠습니다.
이진탐색 알고리즘은 반복, 순환 구조에 사용되며
알고리즘의 입력으로 정렬한 리스트와 Key 값,
A의 탐색 범위인 Low와 High가 제공되어야 합니다.
[ 순환 구조 ]
def binary_Search_1(A, Key, Low, High):
if Low <= High:
mid_ = (Low+High) // 2
if Key ==A[mid_]:
return mid_
elif Key < A[mid_]:
return binary_Search_1(A, Key, Low, mid_-1)
else:
return binary_Search_1(A, Key, mid_+1, High)
return -1
Low와 High으로 항목이 존재하는지 유무를 판단하고
그 크기의 반을 mid로 중간 값을 판단하고
탐색을 성공하면 해당 값의 인덱스를 반환하고
키가 더 작으면 High을 줄여서 순환,
키가 더 크게되면 Low 값을 늘려가면서 값을 찾습니다.
찾고자 하는 인덱스가 없으면 -1 값을 반환합니다.
[ 반복 구조 ]
해당 알고리즘을 반복구조를 통해서 구현이 가능합니다.
def binary_Search_2(A, Key, Low, High):
while Low <= High:
mid_ = (Low+High) // 2
if Key == A[mid_]:
return mid_
elif Key < A[mid_]:
High = mid_ -1
else:
Low = mid_ +1
return -1
거의 같은 방식으로 진행되며
Log 값이 High과 같거나 커지면 무한루프는 종료되며, 그렇지 않으면
mid_ 값을 구하고,
순환 구조와 같은 방식으로 값을 구해질 때 까지 무한 루프를 돌게됩니다.
두 가지의 결과를 확인해보면
binary_Search_1은 33의 숫자의 인덱스를 찾고
binary_Search_2는 13의 숫자의 인덱스를 찾도록 했습니다.
binary_Search_1(list_,33,0,len(list_)-1)
binary_Search_2(list_,13,0,len(list_)-1)
list_ = [1,3,8,13,13,16,21,26,27,30,33,36,39,41,44,49]의 리스트 기준으로
ㅐ당 인덱스를 잘 반환하는 것을 확인할 수 있습니다.
실행 효율성은 순환보다 반복구조가 좋습니다. ㅎㅎ
오늘은 이진탐색 알고리즘에 대해서 간단하게 알아보았습니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif)
'Python > Algorithm' 카테고리의 다른 글
[We-Co] 미로 탐색 - 백준 2178번 (4) | 2022.02.22 |
---|---|
[We-Co] 구현 - 상하좌우 이동 알고리즘, 좌표이동 (4) | 2022.02.21 |
[We-Co] DFS, BFS - Python (0) | 2022.02.15 |
[We-Co] 최대 공약수 , 최소 공배수 - Python (0) | 2022.02.15 |
[We-Co] Python 리스트 sort(), sorted() (0) | 2021.08.03 |