【发布时间】:2019-05-03 21:26:57
【问题描述】:
只需阅读有关字符串散列和多项式散列函数的信息即可进行计算。 在我看来,计算 hash(string) 的时间复杂度是 O(N),其中 'N' 是字符串大小
long long compute_hash(string const& s) {
const int p = 31;
const int m = 1e9 + 9;
long long hash_value = 0;
long long p_pow = 1;
for (char c : s) {
hash_value = (hash_value + (c - 'a' + 1) * p_pow) % m;
p_pow = (p_pow * p) % m;
}
return hash_value;
}
字符串“S”的哈希值可以计算为S[0] + S[1].P + S[2].P.P + . . . S[N - 1].P^(N - 1)
如果计算是 O(N),那么散列 N 个字符串不是 O(N^2) 吗?
【问题讨论】:
-
不是因为你有n个字符串,这些字符串的长度为n,加上n的时间复杂度> 长度为 k 的字符串确实是 O(nk).
标签: string algorithm data-structures hash