zoukankan      html  css  js  c++  java
  • (字符串)哈希

    哈希

    简而言之,字符串哈希——字符串到整数的唯一映射

    哈希只能加密不能解密,所以我们实质上要建立的是一个 单射,即能通过一个字符串得到一个唯一的数。

    我们所常用的哈希是进制哈希:给出一个固定进制的数base,将一个字符串的

    每一个元素看做一个进制位上的数字,所以这个字符串就可以看成一个base进制的数。而这个数就称为这个字符串的哈希值。那么在判断字符串是否相同时,只需要判断它们的哈希值是否相同即可。

    可以类比map的吧,如果不可以当我没说

    哈希冲突

    哈希是通过对数据进行再压缩,从而提高效率的一种解决方法。但由于哈希值是有限的,所以可能有不同的字符串对应了同一哈希值,这样就发生了哈希冲突

    哈希函数

    定义哈希函数:unsigned long long hash[i]

    有:Hash[i] = Hash[i-1] * p + idx(s[i])

    自然溢出方法

    unsigned long long在大于等于(2^{64}+1)时会自动对(2^{64}+1)取模

    单哈希

    Hash[i] = Hash[i-1] * p + idx(s[i])%mod

    p,mod都为质数,且p<mod,mod取极大时冲突很小

    双哈希

    将字符串用不同mod哈希两次,结果用二元组表示

    Hash1[i] = (Hash1[i-1]p+idx(si))%mod

    Hash2[i] = (Hash2[i-1]p+idx(si))%mod

    Hash[i]:<Hash1[i],Hash2[i]>

    这个方法很安全

  • 相关阅读:
    HDOJ 1025 Constructing Roads In JGShining&#39;s Kingdom
    HDOJ 1274 展开字符串
    HDOJ 1503 Advanced Fruits
    Codeforces Round #187 (Div. 2) A,B
    HDOJ 1160 FatMouse&#39;s Speed
    HDOJ 1267 下沙的沙子有几粒?
    HDOJ 1224 Free DIY Tour
    山娃向大家问好啦。
    开发系统建议
    打开web全屏
  • 原文地址:https://www.cnblogs.com/liumengliang/p/13832008.html
Copyright © 2011-2022 走看看