빠에야는 개발중

이진 탐색(binary search) 본문

공부/알고리즘

이진 탐색(binary search)

빠에야좋아 2018. 2. 16. 00:42

이진 탐색은 분할 정복의 기본이라고 할 수 있다. 개념은 알고 있었는데 직접 코드로 짜본 적이 있었나 싶어서 짚고 넘어간다.


원리


간단하게 말하면 "반으로 쪼개기"이다. head에서 tail까지 범위의 배열의 가운데 인덱스인 mid를 정해서 그 수와 찾고자 하는 수를 비교한다. 그래서 "찾는수 < 가운데 수" 이면 탐색 범위를 [head ~ mid]로 쪼개 탐색하고, 반대로 "찾는수 > 가운데 수"이면 탐색 범위를 [mid+1 ~ tail]로 쪼개서 탐색하는 것이다. 이 방식은 O(logn)의 시간 복잡도를 가져 선형 탐색보다 빠르다.


바로 구현에 들어가보자.

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
public class BinarySearch {
    public static String search(int[] arr, int head, int tail, int target) {
        while (head < tail) {
            int mid = (head + tail) / 2;
 
            if (target < arr[mid]) {
                tail = mid;
            } else if (target == arr[mid]) {
                return "탐색 성공";
            } else if (target > arr[mid]) {
                head = mid + 1;
            }
        }
        return "탐색 실패";
    }
 
    public static void main(String[] args) {
        int[] arr = { 5715264574133 };
        int head = 0;
        int tail = arr.length - 1;
 
        System.out.println(search(arr, head, tail, 26));
        System.out.println(search(arr, head, tail, 33));
 
    }
}
 
cs


결과

1
2
탐색 성공
탐색 실패
cs


'공부 > 알고리즘' 카테고리의 다른 글

해시 함수  (0) 2018.02.20
다이나믹 프로그래밍  (4) 2018.02.17
Comments