day 11 字符串前缀哈希法

200 阅读1分钟
  1. 哈希表(离散化是特殊的哈希方式)
    1. 作用:将复杂的数据结构,映射到一段上(一般为x mod 105+310^5+3即大于十万的质数)
    2. 存储结构:
      1. 开放寻址法:只开一个一维数组,且长度是题目数据范围的2~3倍,如果出现冲突,则继续往后插入,直到找到空位。查找同理,删除一般为在其位置打上标记。
      2. 拉链法:一个一维数组储存,如果遇见冲突就在相同位置上的链后面直接加上,如果要删除一般是在要删除的数上加上标记。

开放地址法实现如下:

code.png

开放地址法更加简单易于理解

拉链法实现如下:

code.png

  1. 字符串前缀哈希法
    1. 先预处理所有前缀的哈希(不能映射为0,此处假定不存在冲突)

      1. 将字符串看出p进制的数(一般取131 或13331)
      2. 转换为十进制
      3. 取模(一般对2642^{64})
    2. 算出l到r的哈希值 公式:h[r]-h[l]×prl+1p^{r-l+1} 字符串前缀哈希法在很多字符串相关的问题中都有广泛的应用,例如字符串匹配、字符串相似度计算、回文子串判断等。它的优点是在O(1)的时间复杂度内可以计算出子串的哈希值,从而提高算法的效率。

    实现如下:

code.png