为什么使用哈希表搜索数据更快?因为哈希函数将字符串键转换为整数键,但整数可以排序使搜索更快?
例如,我有关联数组:
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
);
因此找到价值更快。我理解正确吗?
答案 0 :(得分:0)
没有。在将字符串键转换为整数(散列值)散列表实现之后,在简单的平面数组中计算特定位置(索引),在该数组中以最高概率存储相应的条目(键 - 值对)。在哈希表构造中,如果计算的位置为空,则插入条目,否则这种情况称为 collision ,并且a plenty of strategies可以解决它们。
因此,在典型情况下,哈希表每个请求执行一个或几个(摊销常数O(1))密钥比较。 没有排序和二分搜索之类的东西。
但是,如果你考虑PHP数组(我猜),它是一个灵活的数据结构,我不确定它在你的情况下(或永远?)表现为纯哈希表。有关详细信息,请参阅How is the PHP array implemented on the C level?。