在无序字符串集中查找字符串的时间复杂度
Time complexity of finding a string in an unordered set of strings
http://www.cplusplus.com/reference/unordered_set/unordered_set/find/
在 unordered_set 中查找的时间复杂度在 unordered_set 中平均保持不变。
如果我有 unordered_set 个字符串,那么在该集合中查找字符串的时间复杂度是多少?
它是常量还是 O(字符串的长度)?
std::unordered_set
实现为散列 table。它的 find
方法具有 O(1)
的平均情况复杂度和 O(set.size())
键比较的最坏情况复杂度,如 [tab:container.hash.req] 所指定。
默认情况下,std::unordered_set<std::string>
使用 operator==
来比较键,因此每个键比较在 [string.view.ops] 中指定的 O(str.size())
中运行(operator==(const std::string&, const std::string&)
已定义等价于std::string_view(str1) == std::string_view(str2)
,定义为等价于std::string_view(str1).compare(std::string_view(str2) == 0
).
对于 std::unordered_set<std::string>
,容器必须计算要查找的字符串的哈希值。默认情况下,它为此使用 std::hash<std::string>
。该标准未指定 std::hash<std::string>
的任何复杂性要求,但很可能是 O(str.size())
.
http://www.cplusplus.com/reference/unordered_set/unordered_set/find/
在 unordered_set 中查找的时间复杂度在 unordered_set 中平均保持不变。 如果我有 unordered_set 个字符串,那么在该集合中查找字符串的时间复杂度是多少? 它是常量还是 O(字符串的长度)?
std::unordered_set
实现为散列 table。它的 find
方法具有 O(1)
的平均情况复杂度和 O(set.size())
键比较的最坏情况复杂度,如 [tab:container.hash.req] 所指定。
默认情况下,std::unordered_set<std::string>
使用 operator==
来比较键,因此每个键比较在 [string.view.ops] 中指定的 O(str.size())
中运行(operator==(const std::string&, const std::string&)
已定义等价于std::string_view(str1) == std::string_view(str2)
,定义为等价于std::string_view(str1).compare(std::string_view(str2) == 0
).
对于 std::unordered_set<std::string>
,容器必须计算要查找的字符串的哈希值。默认情况下,它为此使用 std::hash<std::string>
。该标准未指定 std::hash<std::string>
的任何复杂性要求,但很可能是 O(str.size())
.