哈希算法问题
原形 int hash(const string &);
其中 sting是中文字符串,我的做法只是:
for(i=0;i<=str.size();i++)
hashcode+=str[i];
但冲突的概率太高了,
有高手可以写一个冲突率较小哈希函数吗?
问题点数:100、回复次数:8Top
1 楼fiftymetre(50米深蓝)回复于 2006-03-17 22:32:39 得分 30
一味的追求低冲突率也不好。理论上,是可以设计出一个几乎完美,几乎没有冲突的函数的。然而,这样做显然不值得,因为这样的函数设计很浪费时间而且编码一定很复杂,与其花费这么大的精力去设计函数,还不如用一个虽然冲突多一些但是编码简单的函数。因此,函数还需要易于编码,即易于实现。
http://www.it-ceo.net/Docs/TEC_DOC/093328169.htm
Top
2 楼ericqxg007(还有很多东西要学(卡卡一米阳光))回复于 2006-03-17 23:13:10 得分 5
有高手可以写一个冲突率较小哈希函数吗?
自己可以考虑一下得到哈希值的规则呀~Top
3 楼ywchen2000(灌水大帝:努力奋斗)回复于 2006-03-17 23:38:06 得分 5
elf函数Top
4 楼ywchen2000(灌水大帝:努力奋斗)回复于 2006-03-17 23:39:07 得分 10
没有人会这样用的。。。Top
5 楼ywchen2000(灌水大帝:努力奋斗)回复于 2006-03-17 23:44:13 得分 15
const int M=10;
int elfhash(char* key)
{
unsigned long h=0;
while(*key){
h=(h<<4)+*key++;
unsigned long g=h&0xF0000000L;
if(g)h^=g>>24;
h&=~g;
}
return h%M
}Top
6 楼defyer007(深入浅出)回复于 2006-03-18 00:13:51 得分 10
用单值的数学函数Top
7 楼ugg(逸学堂(exuetang.net))回复于 2006-03-18 10:28:24 得分 10
一味的追求低冲突率也不好。理论上,是可以设计出一个几乎完美,几乎没有冲突的函数的。然而,这样做显然不值得,因为这样的函数设计很浪费时间而且编码一定很复杂,与其花费这么大的精力去设计函数,还不如用一个虽然冲突多一些但是编码简单的函数。因此,函数还需要易于编码,即易于实现
支持。Top
8 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-18 12:13:08 得分 15
但冲突的概率太高了
----------
楼主应当考查一下处理的串的相关信息 ...
冲突是必然的 ,
但是太多了,
似乎有点 ....不太好 ,^_^Top




