python 算法——哈希表

一、定义
散列表(Hash table,也叫哈希表),是根据关键码值(Key和value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

个人理解:与列表不同的是,哈希表的索引是Key,直接通过Key值访问value,而不同于列表,通过整数[0,∞) [0,\infty)[0,∞)作为索引存储值。

insert(key, value) 插入键值对
get(key) 获取值
delete(key) 删除值

哈希表应用
①集合与字典
字典与集合都是哈希表来实现的
使用哈希表储存字典,通过哈希函数将字典的建映射为下标
如果发生哈希冲突,则通过拉链法或者开发寻址法解决
② MD5算法(SHA2算法)
md5曾经 是密码学中常用
利用md5来验证文件下载是否完整
云存储服务商利用他来判断是否已经在云服务器上,就不用重新上传

二、冲突
对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为冲突(英语:Collision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。

三、Python中的应用
3.1 字典
Python中的字典便应用了哈希表的原理,能使关键字和值一一对应。

字典的初始化:

a = dict()
b = {}
c = {'a': 1, 'b': 2, 'b': '3'}  # 冒号左边是key,右边是value,由于存在重复的b,最后剩下右边的'b':3

访问字典中的value:

print "c['a']: ", c['a']

修改字典

c['a'] = 0 # 将原来映射的1变为0
c['c'] = 4 # 添加新的键值对

删除字典元素

del c['a'] #删除key为a的键值对
c.clear #清除字典c中所有的键值对
del c #直接删除字典c

字典内置函数和方法

函数或方法 作用
cmp(dict1, dict2) 比较两个字典元素
len(dict) 字典长度
str(dict) 输出字典可打印的字符串表示
type(variable) 输出变量的类型
dict.clear() 删除字典内所有元素
dict.copy() 返回字典的一个复制
dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
dict.has_key(key) 如果键在字典dict里返回true,否则返回false
dict.items() 以列表返回可遍历的(键, 值) 元组数组
dict.keys() 以列表返回一个字典所有的键
dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
dict.update(dict2) 把字典dict2的键/值对更新到dict里
dict.values() 以列表返回字典中的所有值
pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem() 随机返回并删除字典中的一对键和值。

猜你喜欢

转载自blog.csdn.net/xili2532/article/details/91412097