3.13 模拟散列表 + 字符串哈希
创始人
2024-06-02 23:49:46
0

哈希表

题目链接

存储方式

1. 拉链法

在这里插入图片描述
当出现地址冲突时,在数组下面开一个链。

单链表的模拟再复习一下,莫忘了
此外,对于数组大小N的选择,尽量选择质数,研究表明质数使得地址冲突产生的次数变少

int k=((x%N)+N)%N;这里注意,是防止x为负数


#include
#includeusing namespace std;const int N=1e5+3;int h[N],e[N],ne[N],idx=0; 
int n;void insert(int x){//将x插入哈希表int k=((x%N)+N)%N;++idx;e[idx]=x;ne[idx]=h[k];h[k]=idx;
}bool query(int x){int k=((x%N)+N)%N;for(int i=h[k];i!=-1;i=ne[i]){if(e[i]==x)return true;}return false;
}int main(){memset(h,-1,sizeof h);cin>>n;while(n--){string s;int x;cin>>s;if(s=="I"){cin>>x;insert(x);}else{cin>>x;if(query(x))cout<<"Yes"<
2. 开放寻址法

思路:

  1. 插入: 映射到k,发现如果被占了,那就从后看找到空的再插入
  2. 查找: 映射到k,一直往后找直到等于null。如果能找到就有,不能找到就没
    使用find实现,find用于查找x所在的下标或者是要被插入的下标

#include
#includeusing namespace std;const int N=1e5+3,null=0x3f3f3f3f;int h[N]; 
int n;int find(int x){//对于x,找一下其在什么位置可以放置,如果没有返回0 int k=((x%N)+N)%N;while(h[k]!=null&&h[k]!=x){k++;if(k==N)	k=0;}return k;
}  int main(){memset(h,0x3f3f3f3f,sizeof h);cin>>n;while(n--){string s;int x;cin>>s;if(s=="I"){cin>>x;int k=find(x);h[k]=x;}else{cin>>x;if(h[find(x)]!=null)cout<<"Yes"<

字符串哈希

题目链接

思路

因为题目是判断区间内字符串是否相等,那么考虑类似的前缀和
定义
“abcdefg”
h[1]=“a”
h[2]=“ab”
h[3]=“abc”
对于每一个h[],我们都将其看作一个p进制数,
其中abc=(123)p
这样每个数都会对应一个值
在字符串哈希中,比较特殊的是,如果我们取P=131,那么发生地址冲突的概率仅为0.01%
因此这里我们就不考虑地址冲突
那么如果要求[L,R]区间内的字符串哈希值
那么就是:
在这里插入图片描述
然后其实我们都不用存,因为假设了哈希地址不冲突,直接每次求值即可。


#include
#includeusing namespace std;
const int N=1e5+10;//h用于存数,p用于存p的几进制 
int h[N],p[N];
int P=131;int n,m;unsigned long long get(int l, int r){return h[r]-h[l-1]*p[r-l+1];
}int main(){cin>>n>>m;string s;cin>>s;p[0]=1;for(int i=1;i<=n;i++){h[i]=h[i-1]*P+s[i-1];p[i]=p[i-1]*P;}while(m--){int l1,l2,r1,r2;cin>>l1>>r1>>l2>>r2;if(get(l1,r1)==get(l2,r2))cout<<"Yes"<

相关内容

热门资讯

玩家终于实锤了!粤麻圈麻将有挂... 你好粤麻圈麻将这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】...
玩家终于实锤了!美酒之城有挂吗... 玩家终于实锤了!美酒之城有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)1、让任何用户在无需AI...
玩家终于实锤了!凯撒皇宫有挂吗... 自定义凯撒皇宫系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!福建十三道有挂... 您好,福建十三道这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785...
玩家终于实锤了!川南麻将有挂吗... 亲,川南麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,川南麻将的开挂软件,名...
玩家终于实锤了!嘉邻游戏有挂吗... 玩家终于实锤了!嘉邻游戏有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家...
玩家终于实锤了!同城游牛鬼有挂... 玩家终于实锤了!同城游牛鬼有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩...
玩家终于实锤了!打两圈麻将有挂... 您好,打两圈麻将这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785...
玩家终于实锤了!歪歪有挂吗(分... 玩家终于实锤了!歪歪有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家,快...
玩家终于实锤了!微乐云南麻将有... 你好微乐云南麻将这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785...
玩家终于实锤了!开心联盟有挂吗... 玩家终于实锤了!开心联盟有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家...
玩家终于实锤了!聚兴茶馆有挂吗... 亲,聚兴茶馆这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,聚兴茶馆的开挂软件,名...
玩家终于实锤了!土豪赢三张有挂... 你好土豪赢三张这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】...
玩家终于实锤了!乐太坊有挂吗(... 玩家终于实锤了!乐太坊有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)1、让任何用户在无需AI插...
玩家终于实锤了!秋水佳人有挂吗... 你好秋水佳人这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】,...
玩家终于实锤了!桦南麻将有挂吗... 您好,桦南麻将这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785}...
玩家终于实锤了!聚友联盟有挂吗... 您好:聚友联盟确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款...
玩家终于实锤了!哈狗游戏有挂吗... 你好哈狗游戏这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】,...
玩家终于实锤了!乐宝棋牌有挂吗... 自定义乐宝棋牌系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!老胡吧有挂吗(... 亲,老胡吧这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,老胡吧的开挂软件,名称叫...