1

我正在研究一种代码剽窃检测方法。我需要为这种方法使用指纹算法。指纹算法将源代码的所有子串放到一个哈希表中。(所有子串长度相同。)为了优化,建议在将指纹放入哈希表时使用Rabin-Karp算法。

例如; 对于 string = abcdef和 length = 5,我们应该将abcdebcdef子字符串放入哈希表。由于字符串的散列需要对字符串的每个字符应用数学运算,因此对于大量子字符串来说会很昂贵。

Rabin-Karp 算法利用子串的连续性。它计算第一个指纹的哈希值。对于其余的子字符串,它使用前一个子字符串。

C++ 的“映射”容器是否会自动将此算法应用于背景上的连续子字符串?还是我应该编写自己的哈希库?

4

1 回答 1

2

std::unordered_map http://www.cplusplus.com/reference/unordered_map/unordered_map/的构造函数采用哈希器。

来自 std::hash 上的在线文档(https://en.cppreference.com/w/cpp/utility/hash):

实际的散列函数是依赖于实现的,并且不需要满足除上面指定的那些之外的任何其他质量标准。

于 2019-04-20T13:53:11.813 回答