如何改进这个哈希函数

Chr*_*utz 2 hash r

反正有没有提高这个哈希的初始化速度?目前,我的机器大约需要20分钟.

#prepare hash()
hash <- list();

mappedV <- # matrix with more than 200,000 elements
for( i in 1:nrow(mappedV) ) {
  hash[[paste(mappedV[i,], collapse = '.')]] <- 0;
}
Run Code Online (Sandbox Code Playgroud)

在这段代码之前,我使用了一个矩阵,但这花了我超过3个小时.所以我不会抱怨20分钟.如果有更好的选择,我只是好奇.我使用哈希函数来计算200,000种可能组合中的每一种.

PS:并发可能是一种选择.但这并没有改善散列.

Jos*_*ien 5

您通常会通过预先分配所需长度的列表来节省大量时间,而不是在每次迭代时增加它.

看吧:

X <- vector(mode="list", 1e5)
Y <- list()

system.time(for(i in 1:1e5) X[[i]] <- 0)
#    user  system elapsed 
#     0.3     0.0     0.3 
system.time(for(i in 1:1e5) Y[[i]] <- 0)
#    user  system elapsed 
#   48.84    0.05   49.34 
identical(X,Y)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

因为Y每次添加时都会复制整个列表,所以附加元素随着大小的增加而变得越来越慢.