skyli
C++之梦
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 62 文章 - 70 trackbacks - 0
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(66)
acm之路(22)
C++之路(32)
php之路(10)
其它知识(2)
随笔档案
(62)
2007年8月 (2)
2007年7月 (2)
2007年5月 (1)
2007年4月 (3)
2007年3月 (1)
2007年2月 (1)
2007年1月 (2)
2006年12月 (1)
2006年11月 (2)
2006年10月 (9)
2006年9月 (2)
2006年8月 (5)
2006年6月 (4)
2006年5月 (10)
2006年4月 (9)
2006年3月 (6)
2006年1月 (2)
文章分类
(31)
生活点滴(23)
文章转载(3)
笑话转载(5)
文章档案
(31)
2006年9月 (1)
2006年8月 (2)
2006年6月 (5)
2006年5月 (12)
2006年4月 (6)
2006年3月 (2)
2006年1月 (3)
友情链接
&豪's Blog
Asp's Blog
Chgsh's Blog
My CSDNBlog
Sempr's Blog
XLQ's Blog
校内网
最新随笔
1. pow函数的性能测试
2. 一道算法题引发的动态内存管理的思考
3. 再谈子集树
4. 位运算求子集树
5. 筛法求素数
积分与排名
积分 - 38422
排名 - 62
最新评论
1. re: 我的动态规划启蒙题
祝贺!我也刚刚看懂,但是加上“一条路径”的输出就更好了。是吧
--东·德
2. re: 我的留言本
评论内容较长,点击标题查看
--黄小姐
3. re: itoa函数
怎么第二个函数无法编译呢。?
int n = atoi(itoa(num, str, 2));
n是不是还是应该是当初num 10 的值啊
--sheena
4. re: 最大匹配匈牙利算法
编程风格很好啊。
--Linzertorte
5. re: pow函数的性能测试
评论内容较长,点击标题查看
--正在开发符点运算库
阅读排行榜
1. itoa函数(13809)
2. 测试程序运行时间(1948)
3. 数组最大长度问题(1343)
4. istringstream用法(1157)
5. 字符串hash函数(1086)
评论排行榜
1. 关于语句作用域(7)
2. 测试程序运行时间(7)
3. itoa函数(7)
4. 如何创建二维数组?(5)
5. 数组最大长度问题(4)
字符串hash函数
字符串hash函数,解决冲突用开放定址法,每次对哈希值加1
在下列程序中,不是按常规方法用哈希表来记录关键字,
而是用整型数组Htable记录关键字在字符串ch中的位置。
在插入时不用把关键字复制到哈希表中,只是记录一个索引,从而提高了效率。
当查询时,只要把Htable的值映射到字符串ch中就可以了。
注意ch的下标要从1开始,因为Htable中的零值认为是空,处理起来比较方便。
#include
<
iostream
>
#include
<
string
>
using
Namespace std
namespace
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;
}
posted on 2007-04-07 16:22
beyonlin
阅读(1086)
评论(2)
编辑
收藏
引用
所属分类:
acm之路
、
C++之路
FeedBack:
#
re: 字符串hash函数 2007-07-04 00:45
原来如此
请教:在insert函数中,key的值没有存到ch组里面去吧?
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;
}
回复
更多评论
#
re: 字符串hash函数
2007-07-09 21:34
beyonlin
@原来如此
我是把key的值在函数外存入ch中,
看你的留言后觉得还是在insert函数里面把key存到ch组比较严谨一点。
谢谢!
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
pow函数的性能测试
一道算法题引发的动态内存管理的思考
筛法求素数
字符串hash函数
插入排序泛型算法
最大匹配匈牙利算法
最小生成树Prim算法
itoa函数
归并排序求逆序数
单源最短路径Dijkstra算法
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理