반응형
Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Sequenial
- 첫서버
- 투포인터
- neo4j 제약조건
- UnsatisfiedDependencyException
- 백준 회전초밥
- nodemon babel
- 플로이드워셜
- neo4j
- 백준 2470
- 그랜빌의 법칙
- PREFECT
- pandas-profiling
- gensim size
- 알고리즘
- BFS
- gensim
- 백준 7795
- neo4j 스키마 정의
- 파이썬
- 워드 임베딩
- spring-boot2
- gensim_models
- 텍스트전처리
- 백준
- neo4j 인덱스 사용
- express
- cs50
- spring-boot3
- GET REQUESTS
Archives
- Today
- Total
정리정돈
이진탐색(Binary Search, python) 본문
728x90
반응형
이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘
이진탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다.
이진탐색은 변수3개를 사용한다
- 시작점
- 끝점
- 중간점
중간점을 기준으로 찾고자 하는 값이 작다면 끝값을 중간점 -1 로 바꿔준다
중간점을 기준으로 찾고자 하는 값이 크다면 시작값을 중간점 + 1 로 바꿔준다.
이진 탐색은 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN)이다.
이진 탐색을 구현하는데에는 재귀를 이용하는 방법과 반복문을 통해서 구현하는 방법이 있다.
- 재귀함수
# 재귀 함수로 구현한 이진 탐색
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start + end)//2
# 찾은 경우 중간점 인덱스 반환
if array[mid] == target:
return mid
# 중간점의 값보다 찾고자하는 값이 큰 경우 중간점 기준 오른쪽 확인
elif array[mid] < target:
return binary_search(array, target, mid + 1, end)
# 중간점의 값보다 찾고자하는 값이 작을 경우 중간점 기준 왼쪽 확인
else:
return binary_search(array, target, start, mid-1)
- 반복문
# 반복문으로 구현한 이진 탐색 소스코드
def binary_search(array, target, start, end):
while start <= end:
mid = (start+end)//2
# 찾은 경우 중간점 인덱스 반환
if array[mid] == target:
return mid
# 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
elif array[mid] > target:
end = mid - 1
# 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else:
start = mid + 1
return None # 찾고자하는 값이 없을경우
728x90
반응형
'알고리즘 > 개념' 카테고리의 다른 글
그리디(Greedy) (0) | 2022.03.10 |
---|---|
다이나믹 프로그래밍(DP) (0) | 2021.06.06 |
스택(Stack)과 큐(Queue) (0) | 2021.05.30 |
트리 자료구조 (0) | 2021.05.24 |
계산 복잡도(시간, 공간) (0) | 2021.02.14 |