哈希表及字符串的哈希

本文介绍了哈希表的基本概念和两种常见的储存方法——拉链法和开放寻址法,这两种方法的复杂度均为O(1)。接着讨论了字符串哈希的原理,选择合适的质数P和模值,降低哈希冲突。并通过一个字符串子串比较问题,展示了字符串哈希在解决此类问题上的高效性。最后给出了一组输入输出样例和AC代码。
摘要由CSDN通过智能技术生成

哈希的作用就是把一个很大的数据映射到一个较小的数据范围内(这个比较小的范围通常是在1e5 – 1e6之间),这样可以更方便我们的查找,计算以及应用。
其实映射的过程很容易完成,也就是取模的过程,但是因为两个不同的数取模后结果可能相同,所以我们需要注意的是哈希表的储存方式。哈希表通常有两种储存的方法,一种是拉链法,一种是开放寻址法
两种方法的实际效果都差不多,复杂度都是O(1),基本可以瞬间完成,所以选一个自己看的顺眼的记一下然后会用就好惹QwQ

1.拉链法

拉链法是采用链表的方式来对我们的哈希值进行储存方式,比较直观,就是找到取模后对应的下标,进行链表的插入操作就可以了。

#include<bits/stdc++.h>
using namespace std;

const int N = 100003;
int h[N], e[N], ne[N], idx;

int insert(int x)   //插入操作
{
   
	int k = (x % N + N) % N;    //防止出现负数的情况
	e[idx] = x;
	ne[idx0 = h[k];
	h[k] = idx ++;
}

bool found(int x)  //查找操作
{
   
	int k = (x %</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值