2012-10-26 63 views
1

動機:我想用bsearch(二進制搜索)以快速通過的121位非負整數排序列表(它們都具有完全相同121位,雖然他們可能有前導零)進行搜索。這些整數是太大,存儲爲單個int S,等等,所以我打算讓他們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

嗯......好主意!我會看看它。 –