算法和数据结构之哈希

本文深入探讨了哈希技术,包括哈希方程的多种方法,如除留余数法和乘法哈希法。讨论了字典数据结构的操作,如插入、删除和搜索,并介绍了直接访问表的概念。接着详细阐述了解决冲突的两种策略:哈希链接和开放寻址法,特别提到了线性探测和双哈希。最后,文章介绍了如何利用哈希提高字符串搜索的效率,如Karp-Rabin算法。
摘要由CSDN通过智能技术生成

哈希方程

哈希方程有很多情况,

例如除留余数法:
h(k) = k mod m
如果m是质数而且不接近2或10的幂,效果就很好。

乘法哈希法:
h(k) = a × k mod 2^w >> (w−r) (>>是right-shift操作)

a是任意w位整数;(a应该是奇数且不接近2的幂)。
w是你正在使用的机器的字的长度。
m = 2^r。

全域哈希法:
h(k) = (a × k + b mod p) mod m

p是大质数。
a和b是0到p-1之间的随机整数。
这是一个很好的哈希函数。

// 哈希相关的算法和密码学相关的哈希用法笔者在现代密码学文章中介绍过,感兴趣的可以去看一下。

字典(Dictionaries)

给定一个字典D,其内容由<key: value>形式的对组成,我们需要定义以下操作:
插入:
D[key]=value
删除:
delete(D[key])
搜索:
value=D[key]
value == nil //如果键没有被存储

字典的行为类似于索引非整数的数组。

字典构成了所有现代计算机语言的一部分:

C++:

	Std::map<key_type, value_type> dictionary_name;

Java:

Map dictionary_name = new Hashtable();
Map dictionary_name = new HashMap();
Map dictionary_name = new LinkedHashMap();

python:
字典数据类型-通过引用创建

en_fr = {
   "red" : "rouge", "green" : "vert","blue" : "bleu", "yellow":"jaune"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值