二、哈希方法
- 自然溢出hash方法
- 单hash方法
- 双hash方法
三、
哈希函数:
hash[T] = hash[T]×p+s[i];
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn = 1e7;
int n, sum;/***n个字符串*******/
int num;
struct Node/**表边***/
{
string s;/*储存该字符串*/
int next;/*****指向下一个相同哈希值的 字符串节点****/
}edge[maxn/10];
int head[maxn];/****相同哈希值的表头***/
string str;
bool Hash()
{
int T(0); /****T表示哈希值, 初始哈为0****/
int p = 33;/**p是一个素数***/
for(int i = 0;i < str.length();i++)
{
T = T*p+str[i];
}
T = abs(T%maxn);
for(int i = head[T];i!=-1;i = edge[i].next)/*****在哈希值为T的字符串中 搜索***/
{
if(edge[i].s == str)
{
return false;/***如果找到相同的 返回false***/
}
}
edge[num].s = str;
edge[num].next = head[T];
head[T] = num;
num++;
return true;
}
void init()
{
sum = 0;
num = 0;
memset(head, -1, sizeof(head));
}
int main()
{
init();
scanf("%d", &n);
for(int i = 0;i < n;i++)
{
cin>>str;
if(Hash())
{
sum++;
}
}
cout <<sum;
return 0;
}