我正在实现minhash和LSH,以便在C ++ 11中对某些字符串元素进行相似性搜索。我的实现的minhash草图是200个64位整数(即vector<uint64_t> MinHashSketch
)的向量。我有超过200万个条目,并且草图生成部分不需要很多时间。但是,存储阶段需要很长时间。我想知道是否可以提出一些建议,以使其更快一点。以下是我使用LSH进行存储的阶段。
我正在草图中的连续元素创建一个哈希,该哈希成为存储区ID。如果为bsize = 5
,则1-5, 6-10, 11-15, ... 196-200
中的MinHashSketch[i]
个元素(第i个元素)构成存储区ID。按照执行该操作的代码。
for (int p = 0; p < 200; p += bsize) { //bsize = 5
string s = "";
for(int x = p; x < (p+bsize); x++){
s = s + to_string(MinHashSketch[i].at(x)); // ith element
}
uint64_t hash1 = 0; // bucket id
Hash_function ((uint8_t*)s.c_str(), s.length(), (uint8_t *)&hash1, 0);
........
........
}