字符串hash初步

如果key不是整数,那么又当如何设计散列函数呢?

一个例子是:如何将一个二维整点P的坐标映射成一个整数,使得整点P可以由该整数唯一的代表,假设一个整点P的坐标是(x,y),其中0<=x<=Range,那么可令hash的函数为H(p)=x*Range+y,这样对数据范围内的任意两个整点P1和P2,H(P1)都不会等于H(P2),就可以用H(P)来唯一的表示该整点P,接着便可以通过整数hash的方法来进一步映射到较小的范围

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

为了讨论问题方便,先假设字符串均由大写字母A-Z组成,在这个基础上,不妨把A-Z视为0-25,这样就把26个大写字母对应到了26进制中。接着,按照将二十六进制转化为十进制的思路,由进制转换的结论可知,在进制转换过程中,得到的十进制肯定是唯一的,由此便可实现将字符串映射为整数的需求(注意转化为的整数最大为26^len-1),其中,len为字符串的长度,代码如下:

int hashFunc(char s[],int len){
	int id=0;
	for(int i=0;i<len;i++){
		id=id*26+(s[i]-'A');//将二十六进制转化为十进制 
	}
	return id;
}

显然,如果字符串s的长度比较长,那么转换成的整数也会比较大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值