HJW's IT Blog

Algorithm: Binary Search 본문

알고리즘

Algorithm: Binary Search

kiki1875 2023. 4. 15. 16:42

Binary Search 란 정렬된 배열에서 원하는 값을 빠르게 찾기 위한 알고리즘이다

Binary Search는 반으로 나누어 검색하는 방법으로 시간 복잡도는 O(log n) 이다. 

 

동작과정

1. 배열의 중간값을 선택한다

2. 중간값과 찾고자 하는 값을 비교

    --> 중간값이 찾고자 하는 값과 같으면 검색을 종료

    --> 찾고자 하는 값이 중간값보다 작으면 배열의 왼쪽으로 다시검색

    --> 찾고자 하는 값이 중간값보다 크다면 배열의 오른쪽으로 다시 검색

    --> 위 방법 반복

 

경비실 문제

 

무식한 방법

    M이 가장 왼쪽에 있는 집부터 가장 오른쪽에 있는 집까지의 거리.

    모든 (M,k) 에 대해 다 조합해본다: O(M^k) 시간

 

    착안점

        --> 경비실이 k개 있다면 집에서 경비실 까지의 거리는 M/(2k) 보다 멀 수 없다.

        --> 경비실을 하나 더 놓는다면 최대 거리는 확실히 줄어든다

 

다른 방법(이진 탐색)

        --> 집들을 x 좌표 기준으로 정렬

        --> 맨 왼쪽 집부터 오른쪽까지 읽어나가며, k개의 경비실을 놓아서 가장 먼 집까지의 거리가 d가 되는지 점검.

        --> 맨 왼쪽 집을 생각해보자

                --> 경비실은 이 집의 좌표에서 d 만큼 오른쪽에 떨어진 곳에 있을 것.

                --> 이 경비실로부터 거리가 d 이내인 집을 모두 제거한 다음, 남은 집에 대해 똑같은 과정을 반목하면 필요한 경                         비실의 수

        --> 만약 필요한 경비실의 수가 k 이하라면, d 값을 줄여서 답이 되는지 점검

        --> 만약 필요한 경비실의 수가 k 초과라면, d 값을 더 키워야 한다

 

Heron's Method

  • sqrt(2) 의 값은?
    • 1은 확실히 아니다. 2도 아니다.
    • 그렇다면 (1+2/1)/2 = 3/2 도 답이 아니지만 위보다 근접
    • 그렇다면, (3/2+2/(3/2))/2 = 17/12 는 위보다도 더 근접
    • x < sqrt(2) 라면 2/x > sqrt(2) 이므로 (x + 2/x) / 2 는 x, 2/x 보다 훨씬 sqrt(2) 에 가깝다

'알고리즘' 카테고리의 다른 글

Algorithm: Network Flow  (0) 2023.05.22
Algorithm: Kruskal Algorithm & Binary Search  (0) 2023.04.17
Algorithm: Segment Tree  (0) 2023.04.14
Algorithm: 욕심쟁이 기법  (0) 2023.04.14
Algorithm: 과반수 찾기  (0) 2023.04.14