Page 16 -
P. 16

표 1-1 A 씨 나이를 맞히는 절차(31살인 경우)
                말하는 사람   문답           비고

                당신       28살 미만입니까?
                A 씨      아니오.
                당신       32살 미만입니까?   28살 이상 36살 미만(28, 29, 30, 31, 32, 33, 34, 35)으로 줄었으므로 중간을 나눔
                A 씨      네.

                당신       30살 미만입니까?   28살 이상 32살 미만(28, 29, 30, 31)으로 줄었으므로 중간을 나눔
                A 씨      아니오.
                당신       31살 미만입니까?   30살 이상 32살 미만(30, 31)으로 줄었으므로 중간을 나눔

                A 씨      아니오.
                당신       31살입니다.      선택지는 하나뿐!
                A 씨      정답입니다.


               이 방법을 사용하면, A 씨가 31살일 경우가 아니라도 네 번 질문하면 반드시 나이를 맞힐 수 있습
               니다(연습 문제 1.1). 즉, A 씨 나이가 20살 이상 36살 미만 중 어떤 숫자라 해도 ‘나이 후보를 반
               으로 쪼개서 점점 줄여 간다’라는 알고리즘(방법, 절차)으로 나이를 맞힐 수 있습니다.

               이렇게 반으로 쪼개서 어느 쪽인지 확인하는 방법은 이진 탐색법(binary search method)이라는 알고
               리즘에 해당합니다. 나이 맞히기 게임을 사례로 들어 소개했지만, 실제로 컴퓨터 과학의 여러 분

               야에서 사용하는 기초적이고 무척 중요한 알고리즘입니다. 이런 중요한 알고리즘이 컴퓨터뿐만
               아니라 나이 맞히기 게임 같은 놀이에서도 효과를 발휘하다니 재미있지요? 이진 탐색법은 6장에
               서 자세히 다룹니다.

               그런데 “20살입니까? 21살입니까? 22살입니까? ...”와 같이 순서대로 물어보는 방법도 비효율
               적이긴 하지만, 이 또한 알고리즘입니다. 선택지를 순서대로 조사하는 방법은 선형 탐색법(linear
               search method) 알고리즘이라고 합니다. 선형 탐색법은 3.2절에서 설명합니다.

               알고리즘의 탁월한 특징은 어떤 특정한 문제가 있을 때 그 어떠한 경우를 생각해도 ‘같은 방법으
               로’ 답을 도출할 수 있다는 점입니다. 앞서 본 나이 맞히기 게임이라면 A 씨 나이가 20살이라도,

               26살이라도, 31살이라도 나이 후보를 반으로 나눠서 어느 쪽인지 확인하는 똑같은 방법으로 답을
               맞힐 수 있습니다. 이 세상은 이미 이런 시스템이 넘쳐 납니다. 내비게이션을 사용하면 현재 어느
               위치에 있더라도 목적지까지 경로를 표시해 주고, 은행 구좌에 들어 있는 돈이라면 딱 지정한 만
               큼 정확하게 출금할 수 있습니다. 이러한 시스템을 알고리즘이 지탱하고 있습니다.




         032
   11   12   13   14   15   16   17   18   19   20   21