zoukankan      html  css  js  c++  java
  • 哈希学习笔记

    大概日后会更新(?)

    零.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)

  • 相关阅读:
    Oracle
    Windows
    Ajax
    Ext JS
    JavaScript
    Linux中查看各文件夹大小命令du
    本地文件上传到Linux服务器的几种方法
    Mysql线程状态
    把mysql里面的一些状态输出到文件里面显示
    linux修改磁盘调度方法
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/13836204.html
Copyright © 2011-2022 走看看