2012-10-26 3 views
1

동기 부여 : bsearch (이진 검색)을 사용하여 121 비트 비 음수 정수 (모두 앞에 121 비트가 있지만, 앞에 0이있을 수 있음)의 정렬 된 목록을 빠르게 검색하려고합니다. 이 정수는 너무 커서 개별적인 int으로 저장할 수 없으므로 mpz_t (GMP 사용)으로 만들 예정입니다. 설명서를 통해 찾고GMP 이진 검색을 찾으십시오 : memcmp를 사용하여 두 개의 GMP mpz_t를 비교하는 방법은 무엇입니까?

, GMP는없는 bsearch 해당하는 날 리드하는 (내가 틀렸다면 정정 해줘,하지만) :

질문 : 우리는 memcmp 또는 무언가를 사용할 수 같은 비트 수를 가진 두 개의 음이 아닌 정수를 비교하는 것과 비슷합니까? mpz_t? 그렇다면 올바른 구문은 무엇입니까?

가능한 경우 검색이 매우 효율적이어야합니다.

또한 (a) C++에서 빠른 검색을 허용하는 121 비트 정수를 저장하기위한 데이터 구조, (b) memcmp을 사용하지 않는 정수를 통한 검색 방법에 대한 대안을 제안합니다.

+1

왜 GMP에는 'bsearch()'가 필요합니까? 그것은 표준'bsearch()'가 적절한 GMP 기반 비교 함수와 함께 사용될 수 있다고 생각합니다. 그렇지 않습니까? –

+0

음 ... 좋은 지적. 실제로 그렇게 할 수 있습니다. –

답변

2

정수가 121 비트 인 경우 기본 128 비트 int 확장자를 사용하지 않는 이유는 무엇입니까? http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html? 그것은 훨씬 빠르며, memcpy와 같은 "값 비싼"연산을 피할 수 있기 때문에 모든 비교가 하나의 명령이어야합니다.

+0

흠 ... 좋은 생각이야! 나는 그것을 들여다 볼 것이다. –