Python字典实现与NumPy多维迭代器解析
1. Python字典实现
1.1 哈希表搜索算法
在Python字典的C代码实现中,哈希表搜索时使用了如下算法:
while (<slot is full> && <item in slot doesn't equal the key>) {
slot = (5*slot) + 1 + perturb;
perturb >>= 5;
}
这里, 5*slot 在C代码里用位运算和加法表示为 (slot << 2) + slot 。扰动因子 perturb 初始为完整的哈希码,其位每次向下移动5位。这样能确保哈希码的每一位都能较快地影响探测的槽索引。最终,扰动因子变为0,模式变为 slot = (5*slot) + 1 ,这能生成0到 ma_mask 之间的每个整数,保证搜索操作最终能找到键(搜索时)或空槽(插入时)。
选择5位的位移值是通过实验确定的,5位比4位或6位在减少冲突方面略好,但差异并不显著。早期版本使用乘法或除法等更复杂的操作,虽然冲突统计表现出色,但计算速度稍慢。
1.2 字典大小调整
1.2.1 调整原则
字典哈希表的大小需要随着键的添加进行调整,代码目标是保持表填充率为2/3。即如果字典持有 n
超级会员免费看
订阅专栏 解锁全文
1400

被折叠的 条评论
为什么被折叠?



