Я не смог найти никакого общего ответа на этот вопрос, но, глядя на MSVC-реализацию из Visual Studio 2017, это выглядит так:
_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).