数据结构—— 散列查找:散列函数的构造方法
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构—— 散列查找:散列函数的构造方法相关的知识,希望对你有一定的参考价值。
数据结构系列内容的学习目录 → \\rightarrow →浙大版数据结构学习系列内容汇总。
2. 散列函数的构造方法
一个 “好”的散列函数一般应考虑下列两个因素:
1. 计算简单,以便提高转换速度;
2. 关键词对应的地址空间分布均匀,以尽量减少冲突。
2.1 数字关键词的散列函数构造
1.直接定址法: 取关键词的某个线性函数值为散列地址,即 h ( k e y ) = a × k e y + b h(key) = a \\times key + b h(key)=a×key+b (a、b为常数)。
2.除留余数法:散列函数为:h(key) = key mod p
例: h(key) = key % 17
这里:p =Tablesize = 17,一般p取素数。
3.数字分析法 :分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址。
比如: 取11位手机号码key的后4位作为地址:
散列函数为: h(key) = atoi(key+7) (char *key)
如果关键词key是18位的身份证号码:
h
1
(
k
e
y
)
=
(
k
e
y
[
6
]
−
′
0
′
)
×
1
0
4
+
(
k
e
y
[
10
]
−
′
0
′
)
×
1
0
3
+
(
k
e
y
[
14
]
−
′
0
′
)
×
1
0
2
+
(
k
e
y
[
17
]
−
′
0
′
)
×
10
+
(
k
e
y
[
17
]
−
′
0
′
)
h
(
k
e
y
)
=
h
1
(
k
e
y
)
×
10
+
10
(
当
k
e
y
[
18
]
=
′
x
′
时
)
或
=
h
1
(
k
e
y
)
×
10
+
k
e
y
[
18
]
−
′
0
′
(
当
k
e
y
[
18
]
为
′
0
′
′
9
′
时
)
\\begin{matrix}h_{1}(key)=(key[6]-'0') \\times 10^{4}+(key[10]-'0') \\times 10^{3}+\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\\\ (key[14]-'0') \\times 10^{2}+(key[17]-'0') \\times 10+(key[17]-'0') \\\\ \\\\h(key)=h_{1}(key)\\times 10+10 \\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}(当key[18]='x'时)\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\\\ 或\\ _ {}\\ _ {}=h_{1}(key)\\times 10+key[18]-'0' \\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {} (当key[18]为'0'~'9'时)\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {}\\ _ {} \\end{matrix}
h1(key)=(key[6]−′0′)×104+(key[10]−′0′)×103+ (key[14]−′0′)×102+(key[17]−′0′)×10+(key[17]−′0′)h(key)=h1(key)×10+10 (当key[18]=′x′时) 以上是关于数据结构—— 散列查找:散列函数的构造方法的主要内容,如果未能解决你的问题,请参考以下文章