哈希函数的构造方法

      My Works 2007-5-17 11:52
哈希函数的构造方法

一、哈希表的概念及作用
一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。 www.suuhoo.com%n"E&j\"l!]s/d
理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
哈希表最常见的例子是以学生学号为关键字的成绩表,1号学生的记录位置在第一条,10号学生的记录位置在第10条...
如果我们以学生姓名为关键字,如何建立查找表,使得根据姓名可以直接找到相应记录呢?
 
awww.suuhoo.comr)^*M9X0n.I/A%Ke D
b书虎社区`"w1SH8k6^
c
d书虎社区欢迎您的到来!!
rif(gS/@

e书虎社区i3]9W"xs
f书虎社区 欢迎光临9H
w9rN!h{moa

g考研|生活|网站制作|专业基础\,fUN%bH7M1~.d
h
i书虎社区欢迎您的到来!!(Tvu3n"X9y_
j考研|生活|网站制作|专业基础2CR/HJ5Z zg
k
(a5G.Y$ N*M3U,S书虎社区欢迎您的到来!!
l
5t+Q^"m3ewww.suuhoo.com
mwww.suuhoo.com N#a*?\0of.e"Hh{
n

@;db_ hcW
o

XGy-Gd~
p
rv'k^]~]8Swww.suuhoo.com
qwww.suuhoo.comH Mu n&Pk,D7?.Z
r书虎社区欢迎您的到来!!0gS h1_7JZ\0h\0yy
s书虎社区 欢迎光临 J+]E` Hs*l(B
t

t书虎社区+CfX2or3Sx3C0U.o
u书虎社区 欢迎光临Qo-M*G~O k
v书虎社区\0b5_'h$ z2K|2o
w
5\DN&Y-kq$ f
x
(t?m.@/LwC^*u;ne书虎社区 欢迎光临
y
i?5vabT6q4zwww.suuhoo.com
z
l
w+n%B0{3jZF书虎社区
1
$ Y G\\0O"b7xD-pB书虎社区
2
aA/Eto%@\书虎社区欢迎您的到来!!
3考研|生活|网站制作|专业基础)h6P\6Od:F'o-I-}5d4H,z
4书虎社区欢迎您的到来!!M(F:buurb
s7w

5考研|生活|网站制作|专业基础V6K        yA7Q
6
g+o4v+h.u7y*Xjl书虎社区欢迎您的到来!!
7书虎社区-S)Y3b^_
8
+Z
ma z6oA$ |;~考研|生活|网站制作|专业基础
9

_@7@K$ OfG'Owww.suuhoo.com
10
bz nys:D考研|生活|网站制作|专业基础
11www.suuhoo.com)W7Y:QK!l
12
]{ d6w~2EOV书虎社区欢迎您的到来!!
13考研|生活|网站制作|专业基础(J*bafi^
14
1o:a9UGq1S Ss考研|生活|网站制作|专业基础
15www.suuhoo.com4LW-]!LqP?hZ
16书虎社区L#fO&`A`PIw
17考研|生活|网站制作|专业基础t,[!u%w*x&c
18书虎社区 欢迎光临&Vtv6P2[
l o3d}3h

19书虎社区 欢迎光临!Q4kpc }
BWL&Lv-c

20书虎社区L
UUQ!Qc

21
\0hq#o5b
xo X书虎社区 欢迎光临
22www.suuhoo.com&iH|}4w
23考研|生活|网站制作|专业基础8wwEW+RH"Aw
24
1j8vyM/j书虎社区欢迎您的到来!!
25
NH8{0f$ |_
P#V~] eJ,i
26书虎社区8k5W^;[2E
|B#Q1mYq:m书虎社区欢迎您的到来!!

A%y
[]        }8sM考研|生活|网站制作|专业基础
刘丽考研|生活|网站制作|专业基础
gr9{j2@

刘宏英www.suuhoo.com0C@7w%VU'[8hd.R5b
吴军

Z ]y']JA a        t书虎社区
吴小艳
h
a'Wm!GQ考研|生活|网站制作|专业基础
李秋梅
Ed4R+W-c.Bm书虎社区 欢迎光临
陈伟
jBB%z"O6_Gii [

...书虎社区欢迎您的到来!!li0^;Z        k3v!e
姓名中各字拼音首字母A/Y@"c D\*cCc
ll书虎社区 欢迎光临6BXH9_/W
lhy
2X.J^'p e9q书虎社区
wj
s/c*O8@'H
d:yBq书虎社区
wxy考研|生活|网站制作|专业基础*P3A?V H#B"VC L6G0]'f
lqm书虎社区"o2V:P{
`p F

cw
aK(O#by书虎社区
...书虎社区 欢迎光临@sA5G~\0?n
用所有首字母编号值相加求和考研|生活|网站制作|专业基础 u:B_'cz*Z8Q"l?$ d:}Q
24
"A
f        aR2I书虎社区
46
i4g1xyM
~
33
-@,Z        |!`$ X书虎社区 欢迎光临
72
5[c*B)a|;H
42考研|生活|网站制作|专业基础#w3?j%S4\s
U

26
9[$ NgO R-R书虎社区
...www.suuhoo.com}%N\1w*B
最小值可能为3 最大值可能为78 可放75个学生%t:d\0^        Sd3^o-D
用上述得到的数值作为对应记录在表中的位置,得到下表:www.suuhoo.com O$ D;ix*gN8?

!W K'o2v;X;|
考研|生活|网站制作|专业基础kjCe ?W5i5V
 
qi-T^t:h书虎社区 欢迎光临
成绩一考研|生活|网站制作|专业基础D3H YBz#kd
成绩二...考研|生活|网站制作|专业基础oJ*sDS"A8BB8~N
3考研|生活|网站制作|专业基础$ L&J;[%xBK'F T | e*e
...
0v!km Oa6I*nrr书虎社区 欢迎光临
pNgD;z
 
'C(|_.]T,Vav书虎社区欢迎您的到来!!
...
4n9Z%i;f5X
IR#k8sK U,m考研|生活|网站制作|专业基础
...
pME WDP考研|生活|网站制作|专业基础

Q5A3g.j Uv书虎社区欢迎您的到来!!
 
PnT%S*o(k"M&y书虎社区
24书虎社区欢迎您的到来!!\;D9_
cqO4a"y1S;R#p        I j

刘丽书虎社区欢迎您的到来!!0P6Io1y.Vr\0\Q
82
6mdW ~"b*f/vEX书虎社区
95
:zQ-E*gycwww.suuhoo.com
25www.suuhoo.com7x2c/zLIVJ6ao7l5e
...
iyt#If$ O\0V$ I1o书虎社区
书虎社区欢迎您的到来!!*a#u-hr~ i$ F~]
 书虎社区\0?R7~/FL
26
tR0yqe]8hmwww.suuhoo.com
陈伟
fiXl[`y {#A j

[!G d+\5W_(F s书虎社区 欢迎光临
 书虎社区欢迎您的到来!!F9Ju DA7?,hr
...考研|生活|网站制作|专业基础h.B1G{!Ag ipK
...
Yy ` Y!o{-c

'l2E`%tN9H$ m书虎社区
 
MKmw\0F:Zr"nBb书虎社区
33
n/\;rW`,J'd(\书虎社区 欢迎光临
吴军考研|生活|网站制作|专业基础L`LXRNH

K
MYOa zs5G*M书虎社区 欢迎光临
 考研|生活|网站制作|专业基础\0u
G        V-J.~K

...www.suuhoo.com/^^&q,[$ M e,a.Yg
...
.u6ULZL*h*ho;r考研|生活|网站制作|专业基础

K0h*lD,i9U6}#xf书虎社区
 书虎社区欢迎您的到来!!B:uN2sA9WM/T~
42
*@$ SknO\Y'g\0v
李秋梅
kl ^2Q'^(V!{}l[4@'p书虎社区

4d%fl&Y!@G
 
S6u
[JGwww.suuhoo.com
...
h&K1ug&]zN书虎社区 欢迎光临
...
.?2bZHT0p\;X
B考研|生活|网站制作|专业基础
书虎社区 欢迎光临-c&]1X.|._&@f+v        J
 
/b{(E7oG*lv考研|生活|网站制作|专业基础
46
\0E7]%U:{3Py8d6^c书虎社区欢迎您的到来!!
刘宏英考研|生活|网站制作|专业基础,_\0|D+c z$ a[W

z
A#nL_#F书虎社区欢迎您的到来!!
 考研|生活|网站制作|专业基础2HK|Y7k
...
;@N
J5OL,R#cgY3P%Mwww.suuhoo.com
...书虎社区欢迎您的到来!!KC4|3z1R4Z

N z+W?5LF书虎社区欢迎您的到来!!
 书虎社区 欢迎光临(AN
r'T,B,x
j@

72

h/D8g:ZWT.]0vO*N考研|生活|网站制作|专业基础
吴小艳
E8[m}/|Q书虎社区

:N6\*fP0l0H.g书虎社区 欢迎光临
 考研|生活|网站制作|专业基础I
i9B6Bz:^v

...l,^HDC/Od
R

...
m;|
phW(LfGYE书虎社区

E2](bTj7|书虎社区
 
:d$ gKQz考研|生活|网站制作|专业基础
78
}sM;{s;q-s3E书虎社区
...
B4c%^L!c%@5A书虎社区 欢迎光临
书虎社区欢迎您的到来!!X*Y3V
Npc&?

 书虎社区 欢迎光临"Q}6dmA
上面这张表即哈希表
W
v8v2~dZt*Y考研|生活|网站制作|专业基础
如果将来要查李秋梅的成绩,可以用上述方法求出该记录所在位置:
-|anwF&N书虎社区李秋梅:lqm 12+17+13=42 取表中第42条记录即可。
;BCI-v-P#J0h问题:如果两个同学分别叫 刘丽 刘兰 该如何处理这两条记录?

[        y0mP4F书虎社区欢迎您的到来!!
这个问题是哈希表不可避免的,即冲突现象:对不同的关键字可能得到同一哈希地址。书虎社区T nw`(\AlL~8Z
二、哈希表的构造方法
%L:pX;x2ov@h~ s考研|生活|网站制作|专业基础
1、直接定址法考研|生活|网站制作|专业基础m4b^jA~9{{@
例如:有一个从1到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。/h0e+wr$ \2A*P
地址书虎社区? _3n].Kv`H
01

aE(]*kl.d$ Qw考研|生活|网站制作|专业基础
02
\d9Xg r1RM
t考研|生活|网站制作|专业基础
...
uNM-C:k        J        \*J书虎社区欢迎您的到来!!
25
$ Fk*urr q考研|生活|网站制作|专业基础
26www.suuhoo.comFg!l%Z\0e|J
27
P0} |3Cz|*D!T(?书虎社区 欢迎光临
...
5D_'U7D1i/F ~+w9R
100u/\CMo$ U`pX#z
年龄考研|生活|网站制作|专业基础"^ P"x&x!K+YJN/a
1
2yc&z j}书虎社区欢迎您的到来!!
2书虎社区)?S9uC(i1pL        n
...考研|生活|网站制作|专业基础a!]|w"P
25书虎社区 欢迎光临2_;i ?,h(R
H8Ju

26
n*a5{bBi
27
u!vU`        a考研|生活|网站制作|专业基础
...
(trOZk
...书虎社区欢迎您的到来!!@_Q~.a
人数书虎社区 欢迎光临6gO9G9F(}$ vG"[ j
3000书虎社区 欢迎光临p:K pGA0{J"m}&v,z
2000
U{N` Y\0].T+E
y书虎社区
...
T6wc:b;b8bL:A书虎社区欢迎您的到来!!
1050
\0k8dU1K,R!fd书虎社区欢迎您的到来!!
...
&s
\i!B6yb8d@书虎社区欢迎您的到来!!
...书虎社区欢迎您的到来!!8x$ ^b7o @YB-B
...考研|生活|网站制作|专业基础J#ZD,c/GR\0vKo
...书虎社区欢迎您的到来!!SK9x\q
r

...
%Z*Kn        x(oqwww.suuhoo.com

I1hp'O        w]\|书虎社区 欢迎光临
 书虎社区欢迎您的到来!!J)f!EpqE Z\0}
 书虎社区.K;ce3Q        gn5Q
 
BuhwY"ruX书虎社区欢迎您的到来!!
 z&nI,O)T*r}3b
 书虎社区欢迎您的到来!!+u;i.ks5o
 
C!X+Z9S        \ b
 
&A9CQ?%s0n        H考研|生活|网站制作|专业基础
2、数字分析法书虎社区G.P*o HK0Ec        kBx
有学生的生日数据如下:www.suuhoo.comv9D|:W!f;_
年.月.日
b6Vt+b1Y;XP8?/|E考研|生活|网站制作|专业基础75.10.03书虎社区欢迎您的到来!!\G"c4H
S}^6J

75.11.23书虎社区欢迎您的到来!!e1w
R0kH6U
t

76.03.02p
kN CmW

76.07.12

gsHY5AI{,hr书虎社区
75.04.21考研|生活|网站制作|专业基础5Su_:^z-|6I,}C2h
76.02.15-OmlU7X,e@g
...书虎社区G9E#e,nS
经分析,第一位,第二位,第三位重复的可能性大,取这三位造成冲突的机会增加,所以尽量不取前三位,取后三位比较好。
$ s'HR-DmF(a#z
3、平方取中法
jnc {Q*Ku1g#E考研|生活|网站制作|专业基础
取关键字平方后的中间几位为哈希地址。www.suuhoo.com]4YS5] t9w3~
4、折叠法考研|生活|网站制作|专业基础 P
UB#X[Ze A

将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位)作为哈希地址,这方法称为折叠法。书虎社区 c:Ibg J9Lz\)e
例如:每一种西文图书都有一个国际标准图书编号,它是一个10位的十进制数字,若要以它作关键字建立一个哈希表,当馆藏书种类不到10,000时,可采用此法构造一个四位数的哈希函数。如果一本书的编号为0-442-20586-4,则:
n+D6s@)s`E
q:b        Q书虎社区欢迎您的到来!!

5864
`)G5RB4UD0u LQ
gY考研|生活|网站制作|专业基础

5864
X&Or0ch]*L书虎社区 欢迎光临

4220)EK1n1H&{_[4S

0224书虎社区;@.~_sc

+)考研|生活|网站制作|专业基础'm9kT4gB

04www.suuhoo.com8tk']v+k

+)
"z/B)k
n
\t(w\书虎社区

04书虎社区欢迎您的到来!!i(b6G0Bk/CJJ

-----------
:`e1X8Wpd:sf考研|生活|网站制作|专业基础

-----------
\-L9NP0ZWwww.suuhoo.com

10088
0X\0m @V#@考研|生活|网站制作|专业基础

6092
kSp(l6_%V(EV6g
ie书虎社区

H(key)=0088
!K'b ^E%^!w$ K6q书虎社区欢迎您的到来!!

H(key)=6092www.suuhoo.com\0?~V&{v;b+C

www.suuhoo.com$ @9{"E4T&ZT
h3C4izTm
www.suuhoo.com(d(iY6t
t^2vy

考研|生活|网站制作|专业基础,j}1xwWD-RQ

(a)移位叠加
C        JV}ga A}dBV书虎社区 欢迎光临

(b)间界叠加书虎社区/NQ        q T8p/W!_l2@

5、除留余数法
P
w ^
r r书虎社区
取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址。

aI!I+v7QB0q'@{3I书虎社区 欢迎光临
H(key)=key MOD p (p<=m)O9k{+Ux"M.\#^!v
6、随机数法
o"HZ_T'@v6JXk书虎社区欢迎您的到来!!
选择一个随机函数,取关键字的随机函数值为它的哈希地址,即
d9\Db.WZ        k书虎社区 欢迎光临H(key)=random(key) ,其中random为随机函数。通常用于关键字长度不等时采用此法。
aG&[wol*I,K"q n书虎社区
对于动态查找表而言,1) 表长不确定;2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的位置,通常称这个函数f(key)为哈希函数。(注意:这个函数并不一定是数学函数) 书虎社区 欢迎光临        fM \:x&d9LYr

K7l@f~8gAV[q书虎社区欢迎您的到来!!哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。 书虎社区 欢迎光临;cZv}W&ot]\

UB!r-X(y Qwww.suuhoo.com现实中哈希函数是需要构造的,并且构造的好才能使用的好。
EFh(|
dB,x Kh7~Y0D书虎社区
www.suuhoo.comoRe'wS&PV`
用途:加密,解决冲突问题。。。。
/c*i!Jw/OD;c用途很广,比特精灵中就使用了哈希函数,你可 以自己看看。
5Do4~f
{8BFo!a
具体可以学习一下数据结构和算法的书。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}