表达式处理、哈希函数与冲突解决

共 18 题
#

1. Scapegoat 树的重建机制中沿路径找第一个 size(child)>α·size(node) 的节点整棵重建,α 的取值如何影响均摊 O(log n)?

A α 取值必须严格小于 0.5 才能保证平衡
B 每次插入都需要重建整棵树
C 插入后沿路径找第一个 size(child) > α·size(node) 的节点整棵重建,均摊 O(log n) ✓ 正确答案
D 重建后该子树仍可能很快再次失衡,导致均摊 O(n)
#

2. Rabin-Karp 滚动哈希如何把字符串匹配降到期望 O(n+m),为什么取大素数模能降低冲突概率?

A 该算法最坏和期望都是 O(n+m)
B 取大素数模的目的是使哈希值总能被整除
C 滚动哈希能把每个窗口的哈希值在 O(1) 内由前一个窗口推出 ✓ 正确答案
D 哈希相等时即可直接判定匹配,无需逐字符核验
#

3. FNV-1a 哈希的 avalanche 性质中为什么适合短字符串但在长输入上混淆不足,与 MurmurHash/xxHash 在质量与速度上的取舍?

A FNV-1a 简单快速,适合短字符串,但长输入时混淆不足 ✓ 正确答案
B FNV-1a 在长输入上的混淆效果优于 MurmurHash
C xxHash 的质量一定比 FNV-1a 差
D FNV-1a 的 avalanche 性质与输入长度无关
#

4. 哈希函数的均匀性要求与常见实现中除法散列、乘法散列与字符串哈希(BKDR/DJB)的选择?

A DJB 字符串哈希用除以 33 的方式计算
B 乘法散列依赖 m 的质因数分解
C 除法散列中 m 取素数可减少周期性聚集 ✓ 正确答案
D 均匀性只要求输入相同输出必相同
#

5. 哈希攻击与安全哈希中为什么不可预测的盐/随机种子能防御针对哈希表的 DoS 攻击?

A 随机种子必须公开以便攻击者验证
B 固定哈希函数配合更大的表就能完全防御哈希攻击
C 随机种子使攻击者无法预知哈希值,从而无法预先构造碰撞集 ✓ 正确答案
D 哈希攻击只能影响链地址法,不影响开放寻址
#

6. AVL 树的平衡维护中插入后如何沿路径回溯更新平衡因子,LL/LR/RR/RL 四种旋转为何都能使子树高度复原,删除的旋转次数上限?

A RL 型失衡只需一次右旋
B 删除时最多只需一次旋转
C 插入后只需一次旋转(或双旋)即可恢复平衡,因为旋转后子树高度复原 ✓ 正确答案
D 平衡因子为 ±2 时无需旋转即可恢复
#

7. 开放寻址(线性探测/二次探测/双重哈希)vs 链地址法的工程权衡中缓存友好性 vs 高负载因子下的退化

A 线性探测能完全避免聚集
B 链地址法对缓存更友好
C 开放寻址缓存友好但高负载因子下退化明显 ✓ 正确答案
D 开放寻址在负载因子为 2 时性能依然最佳
#

8. 双哈希(double hashing)的探测序列中为什么二次探测只产生约一半的不同序列而双哈希有 n 种,双哈希对表长与步长互质的要求?

A 二次探测能产生约 m 种不同的探测序列
B 双哈希的探测序列与二次探测完全相同
C 双哈希要求步长 h2(k) 与表长 m 互质,以保证探测覆盖整个表 ✓ 正确答案
D 表长取合数时双哈希序列一定覆盖全表
#

9. 哈希表的装载因子与冲突解决中链地址法与开放寻址(线性/二次/双重探测)的期望性能对比?

A 线性探测在负载因子接近 1 时期望探测次数急剧增长 ✓ 正确答案
B 链地址法在负载因子接近 1 时性能急剧恶化
C 开放寻址可以容忍任意高的负载因子
D 二次探测的期望性能一定比双哈希差
#

10. 哈希表扩容时的 rehash 策略中为什么渐进式 rehash(如 Redis)能避免单次全量迁移的停顿?

A 渐进式 rehash 能把总迁移开销从 O(n) 降到 O(log n)
B 渐进式 rehash 期间只使用旧表
C 每次操作只迁移一小部分元素,把单次全量迁移的停顿摊薄到各次操作 ✓ 正确答案
D 渐进式 rehash 要求所有元素一次性迁移完毕
#

11. 布隆过滤器的假阳性率推导中 k 个哈希函数与 m 位数组、n 个元素时最优 k 约等于 (m/n)ln2 如何得到?

A k 越大假阳性率越低,没有最优值
B 最优 k 与 m/n 无关,恒为常数
C 最优 k 约为 (m/n)·ln2,由对假阳性率求导得到 ✓ 正确答案
D 最优 k 约为 (m/n)·ln(n)
#

12. 表达式的三种表示中中缀/前缀/后缀如何互相转换,后缀表达式如何用栈求值?

A 后缀表达式无需括号和优先级,可直接用栈求值 ✓ 正确答案
B 中缀表达式一定比后缀表达式更简短
C 前缀表达式求值需要维护两个栈
D 后缀表达式中运算符位于两个操作数之间
#

13. 一致性哈希的原理与分布式系统应用中环形哈希空间 + 虚拟节点,节点增删时仅迁移 O(1/N) 数据

A 节点增删时所有键的映射都会改变
B 节点增删时仅迁移约 1/N 的数据,其余键保持不变 ✓ 正确答案
C 虚拟节点用于减少哈希值的位数
D 一致性哈希只能用于缓存,不能用于存储
#

14. 线性同余哈希(LCG)的缺陷中 LCG 的低位周期短、随机性差,不适合做哈希函数,工程上如何用 splitmix64/Murmur 混合?

A LCG 已经具备良好的 avalanche 性质
B LCG 的高位比特周期比低位更短
C splitmix64 通过线性相乘得到均匀分布,无需异或
D LCG 的低位比特周期短,随机性差,不适合做哈希函数 ✓ 正确答案
#

15. 压缩前缀树(Patricia/radix tree)的空间优化中为什么把单分支路径压缩为边能减少节点数,在 IPv4/IPv6 路由查找中的应用?

A 压缩会增大存储空间
B 压缩后查找时无法沿路径匹配
C radix tree 不适合 IP 路由的最长前缀匹配
D 把单分支路径压缩为一条边可减少节点数 ✓ 正确答案
#

16. Masstree 的 Trie 前缀分层+B+树组合中这种结构能兼顾共享前缀压缩与缓存友好,其乐观并发(版本号 CAS)如何保证一致性?

A Masstree 只使用 Trie,不使用 B+树
B Trie 分层压缩共享前缀,B+树提供缓存友好的节点组织 ✓ 正确答案
C 乐观并发要求读操作必须加锁
D CAS 只能用版本号更新,不能更新节点内容
#

17. MinHash 的 Jaccard 估计中为什么 min-hash 相等概率等于 Jaccard 相似度,为达到 ε 误差需要 O(1/ε²) 个哈希函数的推导?

A min-hash 相等的概率等于 1 - Jaccard
B min-hash 相等的概率等于 Jaccard 相似度 ✓ 正确答案
C 只需 1 个哈希函数即可精确估计 Jaccard
D 达到 ε 误差需要 O(1/ε) 个哈希函数
#

18. Radix Tree(基数树)与前缀树(Trie)的差异中为什么按二进制位分叉的 radix tree 更省空间,在 IP 路由/字典前缀上的应用?

A radix tree 的节点数一定多于字符级 Trie
B 前缀树按二进制位分叉
C radix tree 无法用于 IP 路由
D 按二进制位分叉并压缩单分支路径,使 radix tree 更省空间 ✓ 正确答案