이 문제에서는 유리수의 정렬된 배열이 제공됩니다. 그리고 우리는 부동 소수점 산술을 사용하지 않고 이 유리수 배열에 대해 이진 검색 알고리즘을 사용하여 주어진 요소를 검색해야 합니다.
유리수 p와 q가 모두 정수인 p/q 형식으로 표시되는 숫자입니다. 예:⅔, ⅕.
이진 검색 요소를 찾기 위해 배열의 중간을 찾아 작동하는 검색 기술입니다.
부동 소수점 산술이 허용되지 않는 정렬된 유리수 배열에서 이진 검색을 사용하여 요소를 찾기 위한 것입니다. 우리는 분자와 분모를 비교하여 어떤 요소가 더 크거나 어느 것이 발견되어야 하는 요소인지 찾을 것입니다.
예시
이를 위한 프로그램을 만들어 보겠습니다.
#include <stdio.h>
struct Rational {
int p;
int q;
};
int compare(struct Rational a, struct Rational b) {
if (a.p * b.q == a.q * b.p)
return 0;
if (a.p * b.q > a.q * b.p)
return 1;
return -1;
}
int binarySearch(struct Rational arr[], int l, int r, struct Rational x) {
if (r >= l) {
int mid = l + (r - l)/2;
if (compare(arr[mid], x) == 0) return mid;
if (compare(arr[mid], x) > 0)
return binarySearch(arr, l, mid-1, x);
return binarySearch(arr, mid+1, r, x);
}
return -1;
}
int main() {
struct Rational arr[] = {{1, 4}, {2, 3}, {3, 2}, {7, 2}};
struct Rational x = {3, 2};
int n = sizeof(arr)/sizeof(arr[0]);
printf("Element found at index %d", binarySearch(arr, 0, n-1, x));
} 출력
Element found at index 2