• 哈希学习笔记


    大概日后会更新(?)

    零.HASH的用途

    在数据范围不大的时候,你完全可以用一个map或者set来搞定
    如果可以用c++ 11,你还可以用undered map来搞定
    然鹅map也是hash实现的
    所以当数据范围很大/你莫得c++11/出题人毒瘤的时候,就需要哈希
    为了愉快的进行HASH,下面煮的栗子默认出题人卡掉了你的(map)并关掉了c++11

    一.字符串HASH

    我们想记录下关于一个字符串的信息(比如它是否出现过),就可以把这个字符串转化为一个(p)进制数,存进数组。当然也可以对这个(p)进制数取模。
    就像这个亚子

    for (int i=0;i<n;i++){
    		for (int j=0;j<m;j++){
    			r1[i]=(1ll*r1[i]*bas+s[i][j])%mod1;
    			r2[i]=(1ll*r2[i]*bas+s[i][j])%mod2;
              }
    }
    //代码from yht
    //这里因为有双哈希所以有两个数组
    
    二.对一个数进行HASH

    然鹅本质是取模
    煮个栗子:当我们需要判断一个非常大的数是否出现过。
    这时候,我们显然要让它取模,才能把它记录下来。
    一道例题 解方程

    多哈希

    既然有了哈希,那肯定会存在哈希冲突。
    那么我们可以对要哈希的东西多次哈希。
    于是就有了双哈希和三哈希(据说冲突概率是线性缩小,实际上我也不知道)
    (ps:建议模数>=n^2)

  • 相关阅读:
    nginx 转发请求头信息
    canny算法实现
    单字符旋转校正
    图像匹配
    Edge Extraction (subpixel Precise)
    Edge Extraction 边缘提取
    圆形环绕字 从直角坐标到极坐标的转换
    Image acquisition
    Contour Processing
    Matching
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/13836204.html
Copyright © 2020-2023  润新知