【问题标题】:R: Fast hashing of strings to integer modulo n?R:字符串的快速散列到整数模n?
【发布时间】:2018-05-12 13:37:55
【问题描述】:

我有一个字符串向量,我想将每个元素单独散列为以 n 为模的整数。

this SO post 中,它建议使用digeststrotoi 的方法。但是当我尝试它时,我得到 NA 作为返回值

library(digest)
strtoi(digest("cc", algo = "xxhash32"), 16L)

所以上面的方法是行不通的,因为它甚至不能产生一个整数,更不用说模一了。

对于某些 n,将大型字符串向量散列为整数模 n 的最佳方法是什么?由于向量很大,因此非常欢迎高效的解决方案。

【问题讨论】:

标签: r hash


【解决方案1】:

R 使用 32 位整数作为整数向量,因此可表示整数的范围被限制在 +/-2*10^9 左右。 strtoi 返回 NA 因为数字太大。

Rmpfr 包中的 mpfr 函数应该适合您:

mpfr(x = digest("cc`enter code here`", algo = "xxhash32"), base = 16)
[1] 4192999065

【讨论】:

  • 当我应用于大向量时似乎很慢。
【解决方案2】:

我使用SO post 中的代码创建了一个Rcpp implementation,即使对于较大的字符串向量,生成的代码也非常快。

使用它

if(!require(disk.frame)) devtools::install_github("xiaodaigh/disk.frame")
modn = 17
disk.frame::hashstr2i(c("string1","string2"), modn)

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 2010-11-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多