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
- foreach
- 2D Array
- Util
- Kotlin
- 코틀린
- Recursion
- Main
- solution
- dp
- Poll
- programmers
- GREEDY
- hackerrank
- 2020
- contentToString
- booleanarray
- Developer
- 프로그래머스
- report
- PriorityQueue
- 동적계획법
- Java
- indices
- intarray
- dynamic programming
- sortedBy
- heap
- Queue
- lastIndex
- 알고리즘
Archives
- Today
- Total
Code in
이진 탐색 Binary Search 본문
이진 탐색 Binary Search
이진 탐색은 한번 비교를 할 때마다 탐색 범위가 절반으로 줄어든다.
정렬된 배열을 전제로 탐색한다.
1 |
3 |
5 |
7 |
9 |
11 |
13 |
위와 같은 정렬된 배열에서 Binary Search 이진 탐색을 적용하여 9 를 탐색하는 경우를 생각할 수 있다.
-
정렬된 배열의 중앙 요소를 선택한다.
-
< 7 선택 >
-
-
선택된 값과 찾고자 하는 값을 비교하여 왼쪽 혹은 오른쪽 중 어느 방향으로 탐색을 진행할지를 정한다.
-
< 7이 9보다 작기 때문에 7을 기준으로 오른쪽의 값들을 탐색한다. >
-
-
위의 과정을 반복한다.
-
< 11 선택 >
-
< 11이 9보다 크기 때문에 11을 기준으로 왼쪽의 값들을 탐색한다. >
-
-
남은 탐색 값은 9가 남고, 찾고자 하는 값과 일치하므로 탐색을 끝마친다.
이진 탐색 성능
데이터 집합의 크기 n
반복 횟수 k
데이터 집합의 크기 n 을 2로 몇 번 나누어야 1이 되는지, 해당 k값을 확인할 수 있다.
탐색 과정
탐색하고자 하는 범위를 정의하기 위해 변수 left와 right, mid를 사용한다.
처음에 left는 0, right는 last index, mid는 ( left + right ) / 2 로 설정한다.
right < left가 되는 순간 탐색이 종료되며, 그 전에 해당 값을 찾으면 종료된다.
mid값과 찾고자 하는 값 answer 을 비교하여
mid < answer 이면 left = mid + 1
answer < mid 이면 right = mid - 1
'알고리즘 스터디_개념정리' 카테고리의 다른 글
그래프, 인접 행렬, 인접 리스트 (1) | 2020.08.30 |
---|---|
해시 알고리즘 (1) | 2020.08.30 |
깊이 우선 탐색 DFS, 너비 우선 탐색 BFS (0) | 2020.08.23 |
동적 계획법( DP - Dynamic Programming ), 메모이제이션( Memoization ) (0) | 2020.08.23 |
탐욕 알고리즘 Greedy Algorithm + A* Search Algorithm (1) | 2020.08.17 |
Comments