이진탐색이 어떤 방식으로 진행되는 건지 모르겠습니다

yyggh337 Reply 4 years 30 weeks ago
output에서 한 줄씩 내려갈수록 두 수의 차이가 1/2가 된다는 것은 알겠고, sqrt(2)에 점점 가까워지도록 부등호 양쪽의 숫자를 '2^음수'만큼 조절해야 한다는 건 알겠는데, 그 규칙성을 모르겠어서 구현을 할 수가 없어 어떤 방식으로 구현해야 하는 건지 알고 싶습니다.
withcs2 Reply 4 years 30 weeks ago
C언어에서는 제곱근(square root)을 math.h의 sqrt 함수로 구할 수 있는데 sqrt 함수는 이 문제처럼 이진탐색으로 제곱근을 계산합니다. 이 문제는 sqrt함수가 왜 느린건지 컴퓨터프로그래밍1 수준에서 직관적으로 이해시켜드리기 위하여 출제한 문제입니다. 정확한 이유는 알고리즘 강의에서 시간복잡도 개념을 배울 때 이해할 수 있을거예요 sqrt(2) 범위를 구하는 규칙은 아래와 같습니다. 일단 맨 처음에 0 < sqrt(2) < 2 로 시작합니다. 0 < sqrt(n) < n은 2 이상의 모든 자연수 n에 대하여 항상 성립합니다. 조금만 생각해보면 알 수 있을테니 증명은 생략할게요 0과 2의 평균값 1은 sqrt(2)보다 작습니다. (1 < sqrt(2)) 위에서 구한 식과 합치면 (0 < sqrt(2) < 2) 1 < sqrt(2) < 2 가 됩니다. 1과 2의 평균값 1.5는 sqrt(2)보다 큽니다. (1.5 > sqrt(2)) 위에서 구한 식과 합치면 (1 < sqrt(2) < 2) 1 < sqrt(2) < 1.5 가 됩니다. 이 과정을 좌변, 우변 같아질 때까지 반복하여 범위를 줄여나가면 됩니다.