【问题标题】:Seeking a GMP binary search: How to compare two GMP mpz_t's using memcmp?寻求 GMP 二进制搜索:如何使用 memcmp 比较两个 GMP mpz_t?
【发布时间】:2012-10-16 07:58:51
【问题描述】:

动机:我想使用bsearch(二进制搜索)来快速搜索 121 位非负整数的排序列表(它们都正好有 121 位,尽管它们可能有前导零)。这些整数太大而无法存储为单独的ints,等等,所以我打算将它们设为mpz_t(使用GMP)。

查看手册,GMP 没有 bsearch 等效项(不过,如果我错了,请纠正我),这导致我:

问题:我们可以使用memcmp 或类似的东西来比较两个具有相同位数的非负整数存储为mpz_t 吗?如果是这样,正确的语法是什么?

如果可以的话,搜索应该是相当有效的。

我也愿意接受以下方面的替代建议:(a) 用于存储这些 121 位整数的数据结构,允许在 C++ 中快速搜索,(b) 搜索不使用 memcmp 的整数的方法。

【问题讨论】:

  • 为什么 GMP 需要 bsearch() 等效项?在我看来,标准 bsearch() 可以与适当的基于 GMP 的比较器功能一起使用,不是吗?
  • 嗯...好点。确实可以。

标签: c++ gmp bsearch


【解决方案1】:

如果它们只是 121 位整数,为什么不使用本机 128 位 int 扩展:http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html?这应该会快得多,因为您可以避免任何“昂贵”的操作,例如 memcpy,所有的比较都应该是一条指令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多