什么时间复杂?
std::hash <string>
在这里?
#include <iostream>
int main(){
std::string a = "abc";
std::hash<std::string> hsh;
std::cout<<hsh(a);
return 0;}
它是O(a.size()),所以每个符号都散列吗?
答案 0 :(得分:2)
我找不到对此的任何一般性答案,但是看看Visual Studio 2017中的MSVC实现,它看起来像这样:
_NODISCARD inline size_t _Fnv1a_append_bytes(size_t _Val,
const unsigned char * const _First, const size_t _Count) noexcept
{ // accumulate range [_First, _First + _Count) into partial FNV-1a hash _Val
for (size_t _Idx = 0; _Idx < _Count; ++_Idx)
{
_Val ^= static_cast<size_t>(_First[_Idx]);
_Val *= _FNV_prime;
}
return (_Val);
}
是O(N)。
除了遍历字符串中的每个字符外,我没有其他选择来计算有意义的哈希。因此,我的假设是它将始终为O(N)。