zoukankan      html  css  js  c++  java
  • 哈希

    哈希表

    哈希表又称散列表,其主要思想是将字符串映射成一个 int 或是其他数据类型的数据,从而在比较的时候可以实现 O(1) 的复杂度。

    通常我们采用的是多项式Hash的方法,其具体实现公式一般为:

    [f(s) = sum s[i]*b^i (mod M) ]

    由上式可知,哈希其实是有非常微小的概率出错的,所以我们要选取合适的b和M;其实现一般有两种方法:用unsigned long long自然取模 或是找一个足够大的质数取模。

    下面为hash模板(其用于统计不同字符串的个数,注意 base 和 mod 的取值):

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn=2e6+10;
    char s[maxn];
    int arr[maxn],base=131;
    const int mod=1e9+7;
    int fhash(char *s)
    {
        long long res=0;
        int len=strlen(s);
        for(int i=0;i<len;++i)
            res=(res*base+s[i])%mod;
        return res;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
    
        int n;
        cin>>n;
        for(int i=0;i<n;++i)
        {
            cin>>s;
            arr[i]=fhash(s);
        }
        sort(arr,arr+n);
        int ans=1;
        for(int i=1;i<n;++i)
            if(arr[i]!=arr[i-1])    ans++;
        cout<<ans<<endl;
    
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    python中字典一键多相同值反转技巧
    win10下安装mysql
    上台阶问题的具体走法用python来实现
    桥接模式
    适配器模式
    多线程中lock的使用
    原型模式
    多线程
    建造者模式
    代理模式
  • 原文地址:https://www.cnblogs.com/StungYep/p/12251910.html
Copyright © 2011-2022 走看看