Py算法与数据结构

08 哈希法

冲突、拉链、探测、扩容与 Python 容器

本节 12 题。先独立给出结论和理由,再对照解析;新增题与此前题目统一编号。涉及标签时,标签只表示记录身份。
第 01 题

问题 1

哈希函数和哈希表是什么关系?

第 02 题

问题 2

哈希冲突一定意味着两个键相等吗?

第 03 题

问题 3

容量 5、h(k)=k%5,键 12、7、22 分别进入哪个桶?

第 04 题

问题 4

拉链法如何处理冲突?

第 05 题

问题 5

开放寻址删除槽后,为什么不能总是直接设为从未使用的空槽?

第 06 题

问题 6

装载因子 α 如何定义?容量 8、记录 6 条是多少?

第 07 题

问题 7

扩容后直接复制旧桶编号,是否通常正确?

第 08 题

问题 8

列表能直接作为 Python dict 的键吗?元组一定能吗?

第 09 题

问题 9

若 a==b,正确的哈希实现要求 hash(a) 与 hash(b) 有何关系?

第 10 题

问题 10

把参与哈希/判等的字段在入表后修改,可能有什么问题?

第 11 题

问题 11

dict 的查找复杂度是否永远 O(1)?

第 12 题

问题 12

set 与 dict 的主要接口差异是什么?