250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬 반복문
- 리액트 프로젝트
- useEffect
- 프로그래머스
- 한글 공부 사이트
- React Hooks
- 타입스크립트 리액트
- 파이썬 딕셔너리
- useState
- tanstack query
- 파이썬 for
- 파이썬 slice
- JavaScript
- typeScript
- 리액트
- 내배캠 프로젝트
- 자바스크립트
- Next 팀 프로젝트
- 파이썬 enumerate
- 타입스크립트
- 리액트 훅
- 내일배움캠프 최종 프로젝트
- 내일배움캠프 프로젝트
- 파이썬 replace
- 코딩테스트
- 리액트 공식문서
- 내일배움캠프
- 타입스크립트 props
- 파이썬 for in
- REACT
Archives
- Today
- Total
sohyeon kim
[Python] 이진 탐색 알고리즘 구현하기 본문
728x90
💡 선형 탐색보단 이진 탐색을!
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53] 16개의 데이터
선형 탐색 O(n)
순서대로 하나씩 탐색, 정렬된/정렬되지 않은 리스트 모두 사용 가능, 데이터가 큰 경우 성능 저하
- 최선의 경우 - 1개의 값만 확인 (2를 찾을 때)
- 최악의 경우 - 16개의 값 확인 (없는 숫자를 찾을 때)
이진 탐색 O(lg n)
반으로 범위를 줄여가며 중앙값을 탐색, 정렬된 리스트에서만 사용 가능, 데이터가 큰 경우 뛰어난 성능 보임
- 최선의 경우 - 중앙의 1개의 값만 확인 (19를 찾을 때)
- 최악의 경우 - 4개의 값 확인 (없는 숫자를 찾을 때)
👀 데이터가 커질수록 성능 차이가 극명해진다.
128개의 데이터 ➡️ 선형 탐색 - 128번 확인, 이진 탐색 - 7번 확인
30억개의 데이터 ➡️ 선형 탐색 - 30억번 확인, 이진 탐색 - 31번 확인
선형 탐색
def binary_search(target, data):
if target in data: return data.index(target)
print(binary_search(2, [2, 3, 5, 7, 11])) # 0
print(binary_search(0, [2, 3, 5, 7, 11])) # None
print(binary_search(5, [2, 3, 5, 7, 11])) # 2
print(binary_search(3, [2, 3, 5, 7, 11])) # 1
print(binary_search(11, [2, 3, 5, 7, 11])) # 4
이진 탐색
def binary_search(target, data):
left_idx, right_idx = 0, len(data) - 1
while left_idx <= right_idx:
mid_idx = (left_idx + right_idx) // 2 # 중앙 인덱스 구하기
mid_element = data[mid_idx] # 중앙값
if target == mid_element:
return mid_idx
elif target < mid_element: # 타겟이 중앙값보다 작다면 오른쪽 범위를 버린다.
right_idx = mid_idx - 1
elif target > mid_element: # 타겟이 중앙값보다 크다면 왼쪽 범위를 버린다.
left_idx = mid_idx + 1
728x90
반응형
'Coding Test' 카테고리의 다른 글
[Python] 프로그래머스 : 신규 아이디 추천 72410, isalnum, while, replace, 정규식 (0) | 2024.09.05 |
---|---|
[Python] 프로그래머스 : 햄버거 만들기 133502, slice[:-4] & pop 비교 (0) | 2024.09.03 |
[Python] 프로그래머스 : 대충 만든 자판 160586, enumerate, dictionary (0) | 2024.08.28 |
[Python] 프로그래머스 : 추억 점수 176963, dict, zip, 딕셔너리 (1) | 2024.08.19 |
[Python] 프로그래머스 : [1차] 비밀지도 17681, format, bin, rjust, replace (0) | 2024.08.10 |