C++ STL中无序映射的键搜索时间是多少?

问题描述 投票:0回答:1

我有一些二维数组,每个二维数组都有一些对应的值。我正在将这些2D数组转换为字符串,然后这些字符串被用作 "键",2D数组的对应值被用作无序地图中的 "值"。

二维数组到字符串的转换过程(有一个例子) :

A[3][3] = {(1,2,3) , (4,5,6) , (7,8,9)}

对应的字符串为:1+2+3*4+5+6*7+8+9。

那么,在无序映射内部使用的哈希表中,键搜索时间会是多少呢?

data-structures time-complexity hashtable unordered-map
1个回答
1
投票

如果你的键是一个 std::string,那么对字符串进行哈希处理就会有一定的时间复杂性。 微软的Visual C++标准库在散列方面做得很差,但在恒定的时间内做到了O(1)(只把沿字符串均匀排列的10个字符纳入散列值)。 GNU则是另一个极端,使用了非常好的哈希函数,在键的长度上会是O(K)。

那么你所说的哈希表的 "键搜索时间",相对于表中元素的数量来说,将被摊派O(1),但是如果其他字符串已经哈希到了同一个桶中,它们就需要进行比较:如果长度不同,每一次的比较都将是O(1),如果找到了键或者匹配了一个已有的键的初始子串,则比较的时间将高达O(K)。

这其实都是常识--人们感到困惑的地方是试图给整个操作赋予一个单一的大O值:好吧,在这种情况下,它是O(K),因为这是所涉及的任何操作中最糟糕的复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.