일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++ using
- 벡터와 리스트의 차이
- node
- stencil buffer
- javascript
- react native ios 기기 연결
- 스탠실 버퍼 튜토리얼
- react native accessible
- react native typescript
- 리액트 네이티브 설치 오류
- cyworld
- 싸이월드
- CSS
- react
- react native
- 스탠실 버퍼 사용
- 스탠실 버퍼 시작
- react native typescript navigation
- react native typescript navigate
- Expo
- 리액트 네이티브 맥
- unity stencil buffer
- react native 타입스크립트
- react native mac
- GitHub
- c++ 정보은닉
- C++
- node.js
- html
- react-native
Archives
- Today
- Total
혀니의 이거저거 뿌시기
이진탐색 (시간복잡도와 이유) 본문
728x90
[알고리즘] 이분 탐색 / 이진 탐색 (Binary Search) (velog.io)
[알고리즘] 이분 탐색 / 이진 탐색 (Binary Search)
이진 탐색(이분 탐색) 알고리즘은 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다.이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는
velog.io
정렬되어있는 리스트에서 탐색범위를 절반씩 좁혀가며 데이터를 탐색하는 방법
배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘
시간복잡도는 O(logN) -> 여기서 log는 log₂
단계마다 탐색 범위를 반으로(÷2) 나누는 것과 동일하므로 위 시간 복잡도를 가지게 된다.
<1.재귀함수로 구현한 이진탐색>
# 재귀 함수로 구현한 이진 탐색
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, start, mid - 1)
# 원하는 값이 중간점의 값보다 큰 경우 오른쪽 부분(절반의 오른쪽 부분) 확인
else:
return binary_search(array, target, mid + 1, end)
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n - 1)
if result is None:
print('원소가 존재 X')
else:
print(result + 1)
>>> 4
# sample input
# 10 7
# 1 3 5 7 9 11 13 15 17 19
<2.반복문으로 구현한 이진탐색>
# 반복문으로 구현한 이진 탐색
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
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n - 1)
if result is None:
print('원소가 존재 X')
else:
print(result + 1)
>>> 4
# sample input
# 10 7
# 1 3 5 7 9 11 13 15 17 19
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
스택과 힙의 차이 (메모리구조) (0) | 2024.01.09 |
---|---|
List / Dictionary(C++에서의 map) / Set (0) | 2023.12.16 |
우선순위 큐 (0) | 2023.12.16 |
레드블랙트리 (0) | 2023.12.16 |
map과 hashMap차이 (0) | 2023.12.16 |