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 |
29 | 30 | 31 |
Tags
- 연결리스트
- 연관관계
- CHECK OPTION
- 지연로딩
- 일대다
- JPQL
- exclusive lock
- SQL프로그래밍
- 스토어드 프로시저
- 비관적락
- 백트래킹
- 스프링 폼
- 힙
- 이진탐색
- 낙관적락
- PS
- shared lock
- 즉시로딩
- 유니크제약조건
- 데코레이터
- BOJ
- eager
- fetch
- 다대다
- dfs
- 동적sql
- FetchType
- execute
- querydsl
- 다대일
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
탐색 본문
728x90
- 순차 탐색
- 이진 탐색
# 1. 순차 탐색
- 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법
- 리스트 자료형에서 특정한 값을 가지는 원소의 개수를 세는 count() 메서드를 이용할 때도 내부에서는 순차 탐색이 수행된다.
- 데이터의 개수가 N개일 때 최대 N번의 비교 연산이 필요하므로 순차 탐색의 최악의 경우 시간 복잡도는 O(N)이다.
# 2. 이진 탐색
- 배열 내부에 데이터가 정렬되어 있어야만 사용할 수 있다.
- 3개의 변수를 사용한다.
→ 시작점, 끝점, 그리고 중간점
- 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는다.
- 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN) 이다.
* 이진 탐색 구현 - 1/2 : 재귀함수
def binary_search(arr, target, start, end):
if start > end: # 재귀함수니까 중단점을 제공해줘야 함
return None
mid = (start + end) // 2
if arr[mid] == target: # 찾은 경우 중간점 인덱스 반환
return mid
elif arr[mid] > target: # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
return binary_search(arr, target, start, mid-1)
else: # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
return binary_search(arr, target, mid+1, end)
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
target = 9
result = binary_search(arr, target, 0, len(arr)-1)
* 이진 탐색 구현 - 2/2 : 반복문
def binary_search(arr, target, start, end):
while start <= end:
mid = (start + end) // 2
if arr[mid] == target: # 찾은 경우 중간점 인덱스 반환
return mid
elif arr[mid] > target: # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
end = mid - 1
else: # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
start = mid + 1
return None
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
target = 9
result = binary_search(arr, target, 0, len(arr)-1)
'Problem Solving' 카테고리의 다른 글
Parametric Search의 전형적인 문제 - BOJ2805 (1) | 2023.12.26 |
---|---|
파이썬 언어에서, 입력 데이터를 빠르게 입력 받기 (0) | 2023.12.26 |
정렬 기법 (0) | 2023.12.25 |
DFS와 BFS (0) | 2023.12.24 |
그래프 표현 - 인접 행렬과 인접 리스트 (0) | 2023.12.24 |