数据结构—散列

本文介绍了散列算法的基本思想,如何利用空间换取时间效率,通过整数散列实现集合中元素的快速判断。讨论了除留余数法作为散列函数,并提出了线性探查和平方探查两种冲突解决策略。此外,文章还讲解了字符串哈希的计算方法,以一个C++代码示例展示了如何将字符串映射为整数,从而进行高效字符串比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

散列

散列的定义与整数散列

散列是常用的算法思想之一。即用空间换取时间的想法。

例如:在N={8,3,7,6,2}中是否出现过M={7,4,2},如果采用遍历复杂度则是O(MN),将N用一个bool型数组hashTable[100010]存储起来,其中hashTable[x]==true,则表示整数x在N个数中出现过。
最后查询的数,直接通过hashTable数组判断出每个数是否出现过。

直接把输入的数作为数组的下标来对这个数的性质进行统计
↑这种方法很使用

散列

散列(hash),“将元素通过一个函数转换为整数,使得该整数可以唯一地代表这个元素。”其中把这个转换函数称为散列函数H。也就是说,元素在转换前为key,转换后就是一个整数H(key)。

  • 除留余数法:把key除一个数mod得到的余数作为hash值的方法。H(key) = key % mod;
  • 解决冲突:
    会有两个不同的数,他们的hash值H(key1)和H(key2)是相同的,key1把表中位置为H(key1)的单元占据了,key2便不能再使用这个位置了。这种情况叫做冲突

解决冲突:1.线性探查法(Linear Probing)2.平方探查法(Quadratic Probing)

字符串hash

字符串hash:将一个字符串S映射为一个整数,使得该整数可以尽可能唯一的代表字符串。

##########################################字符串hash的代码#################################################

#include<cstdio>
const int maxn = 100;
char S[maxn][5],temp[5];
int hashTable[26*26*26+10];

int hashFunc(char S[],int len)
{
	int id = 0;
	for(int i = 0;i < len;i++)
	{
		id = id*26 + (S[i]-'A');
	}
	return id;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值