我有一组字符串需要转换为唯一的短标识符。
标识符应为:
我想过这样做:
string <- c("this is obviously an amateur")
library(digest)
hash <- digest(object = string, algo = "crc32", serialize = FALSE)
导致&#34; ac32ed9d&#34;。
我的问题是:
crc32
造成冲突 - 这会是一个问题吗,比方说500长句?答案 0 :(得分:3)
我不熟悉R,但我会尝试回答一般问题。
通常,哈希码会在给定范围[0..R]
内的给定字符串或对象(o)中生成一个数字。
N = hash(o,R)
您可以使用此数字生成短字符串,如下所示:
[A-Z,a-z,0-9]
。用L表示其大小(例如L = 62)a_1,...,a_k
,其中每个a_i
是[0 .. L-1]中的数字0 -> A, 1 -> B, ..., 62 -> 9
您可以在您选择的长度K处截断结果数字序列。
可用序列的数量与冲突概率之间存在基本权衡。当您使用良好的散列函数时,您可以假设数字N在该范围内均匀分布。当您选择L个字符的字母并且序列长度为K时,碰撞概率为(1 / L)^ K。