字符串hash函数
来源:互联网 发布:英国病人小说知乎 编辑:程序博客网 时间:2024/05/18 00:48
转自 http://www.cppblog.com/shyli/archive/2007/04/07/21455.html
字符串hash函数
字符串hash函数,解决冲突用开放定址法,每次对哈希值加1在下列程序中,不是按常规方法用哈希表来记录关键字,
而是用整型数组Htable记录关键字在字符串ch中的位置。
在插入时不用把关键字复制到哈希表中,只是记录一个索引,从而提高了效率。
当查询时,只要把Htable的值映射到字符串ch中就可以了。
注意ch的下标要从1开始,因为Htable中的零值认为是空,处理起来比较方便。
#include<iostream>
#include<string>
using Namespace stdnamespace std;
const int MAXN = 9973; //哈希表长度
const int len = 30; //字符串的最大长度
int Htable[MAX];
char ch[MAX][len]; //存储关键字的字符串
unsigned long Hash(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 % MAX;
}
int search(char * key)
{
unsigned long i = Hash(key);
while(Htable[i])
{
if(strcmp(ch[Htable[i]], key) == 0)
return i;
i = (i + 1) % MAX;
}
return -1;
}
int insert(char * key, int j) //j为关键字在ch中的位置,即索引
{
unsigned long i = Hash(key);
while(Htable[i])
i = (i + 1) % MAX;
Htable[i] = j;
return i;
}
#include<string>
using Namespace stdnamespace std;
const int MAXN = 9973; //哈希表长度
const int len = 30; //字符串的最大长度
int Htable[MAX];
char ch[MAX][len]; //存储关键字的字符串
unsigned long Hash(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 % MAX;
}
int search(char * key)
{
unsigned long i = Hash(key);
while(Htable[i])
{
if(strcmp(ch[Htable[i]], key) == 0)
return i;
i = (i + 1) % MAX;
}
return -1;
}
int insert(char * key, int j) //j为关键字在ch中的位置,即索引
{
unsigned long i = Hash(key);
while(Htable[i])
i = (i + 1) % MAX;
Htable[i] = j;
return i;
}
- 字符串Hash:各种字符串Hash函数比较
- 字符串hash函数
- 字符串hash函数
- 经典字符串Hash函数
- 经典字符串Hash函数
- 字符串hash函数
- 字符串Hash函数评估
- 各种字符串Hash函数
- 字符串Hash函数对比
- 字符串Hash函数评估
- 各种字符串HASH函数
- 字符串Hash函数
- 经典字符串HASH函数
- 字符串Hash函数比较
- 字符串Hash函数
- 各种字符串Hash函数
- 字符串hash函数
- 常用字符串hash函数
- Shortest Palindromes
- 线段树模板
- An Interesting Set
- 猫和老鼠
- 辉辉的一天
- 字符串hash函数
- 图论算法
- 电脑小知识130条
- 反身代词的用法
- XComp/XPack v 0.98
- Above Average
- 这一年如何开始
- Number lengths
- The 3n + 1 problem