오늘 배운 내용 중 이진탐색 알고리즘에 대한 정리
이진탐색 알고리즘은 정렬된 상태로 이루어진 리스트에 대한 탐색임!
강사님이 일부 달아주신 주석에 추가적으로 복습하며 이해한 부분 주석처리하였음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#이분(이진)탐색 (정렬이 되어 있는 경우 반 나눠서 탐색)
def binary_search(arr, x): #x: 찾고자 하는 값
start = 0
end = len(arr) - 1
while start <= end:
mid = (start + end) // 2 # // 정수로 나눔. 따라서 끝의 절반으로 나누면 안됨. # 25 기준으로 작으면 앞 부분 절반, 크면 뒷 부분 절반
if x == a[mid]: # 본인 이해: 예를들어 현재는 숫자 25번의 자리
return mid
elif x > arr[mid]:
start = mid + 1 # 찾고자 하는 값 x가 mid 보다 크다면 오른쪽으로 탐색
else:
end = mid - 1 # 찾고자 하는 값 x가 mid 보다 작다면 왼쪽으로 탐색
return -1 # 찾지 못했을 땐 -1 반환
d = [1, 4, 9, 16, 25, 36, 49, 64, 81] # 9개 숫자, 방번호 0부터 8. 9 나누기 2 -> 4. 따라서 4번째의 25가 mid.
#25 기준으로 또 절반 나눔.
print(binary_search(d, 36))
print(binary_search(d, 50))
|
cs |
이해를 위해 아래 블로그 링크 참고하였는데, 짤로 만들어진 것 참고하면 좋을거 같다.
blog.naver.com/dnfla420/222093579890
순차 탐색과 이진(이분) 탐색 | Sequensial & Binary | Search | 파이썬 | 알고리즘
알고리즘을 공부하기 전에 컴퓨팅 사고력을 키우기 위한 것임을 기억하자.실전에서는 아래 처럼 하면 된다....
blog.naver.com
작성일: 2021. 4. 23. 15:58
기존 블로그 글 이전일: 2021. 5. 7. 09:24
'Programming Language > Python' 카테고리의 다른 글
[백준 알고리즘] 11279번: 최대 힙(우선순위 큐) - Python (0) | 2022.03.01 |
---|---|
[Python] Dictionary(딕셔너리) 사용법 및 특징 (0) | 2022.02.26 |
[Pycharm] PyCharm 폰트 사이즈 조절 (0) | 2021.11.07 |
[Pycharm] PyCharm <-> Git 연동 방법 (0) | 2021.11.06 |
[Python] split, map 함수 (여러 변수 동시에 입력 받기) (0) | 2021.05.07 |