`

一个对字符串很好的Hash函数ELFHHash

阅读更多
#include<stdio.h>
#define M 10000

int ELFHash(char *key){
	unsigned long h = 0;
	unsigned long g;
	while(*key){
		h = (h<<4) + *key++;
		g= h & 0xf0000000L;
		if(g) h ^= g >> 24;
		h &= ~g;
	}
	return h % M;
}

int main(){
	char s[100];
	while(scanf("%s",s)){
		printf("hash %s=%d\n",s,ELFHash(s));
	}
	return 0;
}

 BTW:用gcc编译C++方法 gcc -o test.out test.cpp -lstdc++

如果没有-lstdc++能编译,但无法链接接到库

2
0
分享到:
评论

相关推荐

    hash字符串函数总结

    BKDR Hash(Berkely-Knuth-Dhrymes Hash)基于一个固定的种子值,每次迭代都将当前字符与种子值相乘,然后加上哈希值。这种方法简单且高效,适合处理简单的字符串。 这些哈希函数各有特点,适用于不同的场景。例如...

    用C语言实现常用的字符串哈希函数

    用C语言实现常用的字符串哈希函数,比如RSHash、JSHash、PJWHash、FNVHash等

    获取一个字符串的散列hash

    为了实现一个稳定的字符串散列函数,我们可以采用MD5(Message-Digest Algorithm 5)或SHA(Secure Hash Algorithm)系列算法。然而,JavaScript原生并不支持这些算法,因此通常需要引入第三方库,比如`crypto-js`...

    各种字符串Hash函数比较[借鉴].pdf

    1. **均匀性**:一个好的Hash函数应该能够将输入字符串均匀地映射到哈希表的各个位置,减少哈希冲突的可能性。 2. **计算效率**:Hash函数的计算速度直接影响程序的整体性能。快速的Hash函数在处理大量数据时尤为...

    字符串统计函数,统计不同字符个数和每个字符出现的次数

    本篇将详细探讨如何实现一个统计字符串中不同字符个数以及每个字符出现次数的函数,我们将以C++语言为例进行讲解。 首先,我们需要了解基本的字符串处理函数和数据结构。在C++中,`std::string` 是用来表示字符串的...

    经典字符串hash函数

    该函数通过将当前字符的ASCII码乘以前一个字符的哈希值,再累加到总和上,确保了不同的字符串得到不同的哈希值。 2. **RS哈希**: 由Bob Jenkins提出的RS哈希(Reed-Solomon)使用异或操作和位移操作来计算哈希值...

    字符串哈希函数设计

    通过以上讨论,我们可以看出,设计一个高效的字符串哈希函数并非易事,它需要综合考虑哈希函数的特性、计算效率以及冲突处理策略。使用斐波那契函数思想可能提供一种新的视角,但在实际应用中还需要根据具体场景进行...

    各种字符串Hash函数比较1

    标题提到的"各种字符串Hash函数比较1"是一个关于评估不同字符串哈希函数性能的文章。描述中提到了一些常见的哈希函数,如BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash,并且给出了这些...

    数据结构(字符串匹配,hash,二叉树)训练

    在这个实验中,你需要设计一个哈希函数,确保不同的字符串能生成不同的哈希值,同时减少哈希冲突。算法的伪代码展示了如何使用哈希值进行匹配:首先计算模式串和目标子串的哈希值,然后逐位移动目标子串并重新计算...

    自己实现的字符串hash类

    1. **哈希函数**:这是核心部分,它将输入的字符串转换为一个整数值,这个值应该均匀分布在整个哈希表的范围内,以减少哈希冲突的可能性。常见的哈希函数有DJB2、CRC32、FNV1a等。设计一个好的哈希函数对于哈希表的...

    密码学hash函数关于hash函数的ppt

    - 对于任意给定的消息\(x\),很难找到另一个不同的消息\(y\),使得\(H(y) = H(x)\)。 - 这意味着即使知道了某个消息的哈希值,也难以找到另一个消息产生相同的哈希值。 #### 五、基于分组密码链接的Hash函数 ...

    字符串Hash

    字符串Hash函数把一个任意长度的字符串映射成一个非负整数,并且其冲突概率几乎为 000。 取一固定值 PPP,把字符串看作 PPP 进制数,并分配一个大于 000 的数值,代表每种字符。一般来说,我们分配的数值都远小于P。...

    字符串哈希成数字的C实现的代码(含测试)

    将字符串哈希成数字的几种经典的方法:其中的一部分 #ifndef INCLUDE_GENERALHASHFUNCTION_C_H #define INCLUDE_GENERALHASHFUNCTION_C_H #include typedef unsigned int (*hash_function)(char*, unsigned int...

    删除一个字符串中重复的字符

    在编程领域,删除一个字符串中重复的字符是一个常见的任务,特别是在数据处理、文本清洗或字符串操作的场景下。本文将详细讲解如何实现这个功能,主要采用插入排序的思想进行操作。 首先,我们需要理解插入排序的...

    字符串hash的研究

    哈希函数可以用于字符串,将字符串转化为一个整数值,这个值通常代表了字符串的某种特性或特征。这样的哈希值可以用来快速比较两个字符串是否相等,或者在哈希表中高效地查找字符串。 字符串的哈希算法多种多样,...

    ACM-字符串处理专练

    在ACM(国际大学生程序设计竞赛)中,字符串处理是一个重要的专题,对于参赛者来说,理解和熟练掌握字符串处理技巧是必不可少的。这个“ACM-字符串处理专练”合集显然是为了帮助程序员们提升这方面的能力。下面我们...

    Hash冲突的一般解决方案与字符串查找中hash的使用.docx

    在字符串查找问题中,哈希函数可以用来快速判断一个字符串是否包含在另一个字符串中。例如,Karp-Rabin算法利用滚动哈希(Rolling Hash)减少比较次数。通过对要查找的字符串计算哈希值,并在主字符串中滑动窗口...

    字符串处理算法

    Rabin-Karp算法是Hash算法在字符串处理中的一个典型应用,它利用了字符串和k进制数的对应关系来实现快速字符串匹配。Rabin-Karp算法特别适用于字符串长度较短且字符种类有限的情况。在Java中,HashMap是一个重要的...

Global site tag (gtag.js) - Google Analytics