为什么使用哈希表搜索数据更快?

时间:2014-04-17 09:38:34

标签: hashtable

为什么使用哈希表搜索数据更快?因为哈希函数将字符串键转换为整数键,但整数可以排序使搜索更快?

例如,我有关联数组:

array 
(
   [str.key1] => value1
   [str.key2] => value2
   [str.key3] => value3
   [str.key4] => value4 
);

因此,要使用str.key3查找value3,必须运行所有str.keys进行比较,因此搜索具有复杂度O(n)。但是,如果我对每个str.key进行散列,我会收到数字:

array
(
   [5] => value1
   [2] => value2
   [7] => value3
   [3] => value4    
);

然后发生排序:

array
(
   [2] => value1
   [3] => value2
   [5] => value3
   [7] => value4    
);

因此找到价值更快。我理解正确吗?

1 个答案:

答案 0 :(得分:0)

没有。在将字符串键转换为整数(散列值)散列表实现之后,在简单的平面数组中计算特定位置(索引),在该数组中以最高概率存储相应的条目(键 - 值对)。在哈希表构造中,如果计算的位置为空,则插入条目,否则这种情况称为 collision ,并且a plenty of strategies可以解决它们。

因此,在典型情况下,哈希表每个请求执行一个或几个(摊销常数O(1))密钥比较。 没有排序和二分搜索之类的东西。

但是,如果你考虑PHP数组(我猜),它是一个灵活的数据结构,我不确定它在你的情况下(或永远?)表现为纯哈希表。有关详细信息,请参阅How is the PHP array implemented on the C level?