散列(哈希,Hash)入门

Ⅰ.散列表

散列表通过关键字访问某一特定元素,可以用来建立映射,平均时间复杂度优越。

除以下例题外,散列表在其他许多需要映射的地方也有用武之地(譬如杜教筛等筛法中)。因此不附过多例题。

Ⅱ.字符串散列

字符串散列通过散列函数将字符串的比较转化成整数的比较,可以大大减少时间复杂度。 滚动散列可以处理字符串匹配问题。

但需要注意的是字符串散列是可以被卡的,因此尽量使用双模数散列等技巧提高正确率,能够用其他方法时尽量选用其他方法。

Ⅲ.树散列

将散列推广到树上,可以解决判断树是否同构的问题。

此部分内容本身稍难,故题目难度也稍大,建议先了解树上的简单动态规划等内容后再学习。


  1. P1102 - A-B 数对
  2. P1955 - [NOI2015] 程序自动分析
  3. P4398 - [JSOI2008] Blue Mary的战役地图
  4. P3370 - 【模板】字符串哈希
  5. P2957 - [USACO09OCT] Barn Echoes G
  6. P3879 - [TJOI2010] 阅读理解
  7. P1381 - 单词背诵
  8. P5018 - [NOIP 2018 普及组] 对称二叉树
  9. P5043 - 【模板】树同构 / [BJOI2015] 树的同构
  10. P4323 - [JSOI2016] 独特的树叶