散列(hash)存储的应用

判断一整数序列中的数是否另一整数序列中出现过

#include 
using namespace std;
bool hashTable[10000]={false};
int main(){
    int n1,n2,x;
    cin>>n1>>n2;//个数
    for(int i=0;i<n1;i++){
        cin>>x;
        hashTable[x]=true;//按输入的整数为下标,以是否为true来判断是否有出现过
    }
    for(int i=0;i<n2;i++){
        cin>>x;
        if(hashTable[x]==true)
        cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

统计输入整数序列的数在序列中出现的次数

#include 
using namespace std;
int hashTable[10000]={0};
int main(){
    int n,x;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>x;
        hashTable[x]++;//统计次数
    }
    for(int i=0;i<n;i++){
        cin>>x;
        cout<<hashTable[x]<<endl;
    }
    return 0;
}

将26进制转化成十进制

#include 
#include 
using namespace std;
int hashFunc(char s[],int length){
    int id=0;//记录十进制数
    for(int i=0;i<length;i++)
    id=id*26+(s[i]-'A');//将26进制转化为十进制
    return id;
}
char str[100];
int main(){
    int len=0;
    cin>>str;
    len=strlen(str);
    cout<<hashFunc(str,len)<<" ";
    return 0;
}

统计输入字符序列的字符在另一序列中出现的次数

#include 
#include 
using namespace std;
int hashFunc(char s[],int length){
    int id=0;//记录十进制数
    for(int i=0;i<length;i++)
    id=id*26+(s[i]-'A');//将26进制转化为十进制
    return id;
}
int hashTable[26*26*26+10]={0};//记录出现次数
char str1[100],str2[100];
int main(){
    int len1,len2;
    cin>>len1>>len2;
    for(int i=0;i<len1;i++){
        cin>>str1;
        int id=hashFunc(str1,1);
        hashTable[id]++;
    }
    for(int i=0;i<len2;i++){
        cin>>str2;
        int id=hashFunc(str2,1);
        cout<<hashTable[id]<<endl;
    }
    return 0;
}

小结:将元素通过散列函数转化成整数,使整数尽量唯一代表该元素。

你可能感兴趣的:(小白进阶,哈希算法)