C++11 で一部の文字列要素の類似検索に minhash と LSH を実装しています。私の実装の minhash スケッチは、200 個の 64 ビット整数のベクトルですvector<uint64_t> MinHashSketch
。200 万を超えるエントリがあり、スケッチ生成部分にはそれほど時間がかかりません。ただし、バケット化段階には時間がかかります。もう少し速くするための提案を得ることができるかどうか疑問に思っています。以下は、LSH を使用したバケット ステージです。
スケッチ内の連続した要素を取得して、バケット ID になるハッシュを作成しています。の場合bsize = 5
、(i 番目の要素の) の要素がバケット ID を形成します1-5, 6-10, 11-15, ... 196-200
。MinHashSketch[i]
それを行うコードに従ってください。
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);
........
........
}