이번 과제는 이진 탐색 알고리즘을 구현하는 거예요.
이진 탐색 알고리즘은 배열을 절반으로 계속 나누면서, 찾고 있는 항목이 들어 있는 절반만 남기는 방식으로 항목을 찾아요. 이렇게 하면 항목을 찾을 때까지, 또는 가능한 모든 위치를 없앨 때까지 항목이 있을 수 있는 위치를 빠르게 좁혀 나갈 수 있어요.
이진 탐색은 배열이 정렬되어 있을 때만 동작해요.
알고리즘은 다음과 같아요:
예를 들어볼까요?
다음과 같이 정렬된 배열에서 숫자 23을 찾는다고 해봐요: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32]만 남겨요.[23].Haskell은 여러 종류의 배열을 지원해요. 이 연습 문제에서는 Data.Array의 불변이고 박싱된 비엄격 배열을 사용해요. 이 배열의 사용법에 대해서는 다음에서 더 자세히 읽어볼 수 있어요:
이 연습 문제의 선택적 확장으로, 임의의 경계를 가진 배열, 예를 들어 첫 번째 인덱스가 꼭 0이 아니어도 되는 배열에서도 find 함수가 동작하도록 만들어 봐요.
Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.