【问题标题】:Why it is faster to search data using hash table?为什么使用哈希表搜索数据更快?
【发布时间】:2014-06-01 12:22:53
【问题描述】:

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

例如我有关联数组:

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

所以要使用str.key3找到value3,需要遍历所有的str.key进行比较,因此搜索的复杂度为O(n)。但是,如果我对每个 str.key 进行哈希处理,我会收到数字:

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

然后进行排序:

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

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

【问题讨论】:

    标签: hashtable


    【解决方案1】:

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

    因此,在典型情况下,哈希表对每个请求执行一个或很少(摊销常数 O(1))键比较。 没有排序之类的二进制搜索。

    但是,如果您考虑 PHP 数组(我猜),它是一种灵活的数据结构,我不确定它在您的情况下(或曾经?)表现得像纯哈希表。详情请见How is the PHP array implemented on the C level?

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 2014-05-24
      • 2012-08-14
      • 2014-04-07
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多