skyli
C++之梦
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 62 文章 - 96 trackbacks - 0
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
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
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
(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)
生活点滴(24)
文章转载(3)
笑话转载(4)
文章档案
(32)
2011年1月 (1)
2009年6月 (1)
2006年9月 (1)
2006年8月 (2)
2006年6月 (5)
2006年5月 (12)
2006年4月 (5)
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. 筛法求素数
积分与排名
积分 - 233522
排名 - 108
最新评论
1. re: 优先队列用法
评论内容较长,点击标题查看
--tanti
2. re: 优先队列用法
给力!!
--***
3. re: pow函数的性能测试
Pow 函数要处理各种非整数次幂情况,比如0.5就等于开根号了,0.2就等于开5次方了。当然比直接乘慢的多。
--YYX
4. re: istringstream用法[未登录]
@gong
cin是标准输入,在std中已经声明了。
--mm
5. re: istringstream用法[未登录]
您好,为什么这里的getline(cin, line)中的cin没有定义就直接使用了呢?
--gong
阅读排行榜
1. itoa函数(67398)
2. 优先队列用法(57140)
3. istringstream用法(19259)
4. 数组最大长度问题(11851)
5. 测试程序运行时间(10204)
评论排行榜
1. itoa函数(14)
2. 测试程序运行时间(9)
3. 关于语句作用域(7)
4. pow函数的性能测试(6)
5. 数组最大长度问题(5)
字符串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
阅读(5480)
评论(3)
编辑
收藏
引用
所属分类:
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组比较严谨一点。
谢谢!
回复
更多评论
#
re: 字符串hash函数
2009-04-01 13:31
nuoshueihe
怎么没有写完啊?
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
pow函数的性能测试
一道算法题引发的动态内存管理的思考
筛法求素数
字符串hash函数
插入排序泛型算法
最大匹配匈牙利算法
最小生成树Prim算法
itoa函数
归并排序求逆序数
单源最短路径Dijkstra算法
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理