一、定义
一个哈希组是满足下列条件的四元组(x,y,k,h):
1) x是所有可能的消息的集合;
2)y是由可能的消息摘要或认证标签构成的优先级,摘要即压缩后的数据;
3)K 是密钥空间,是所有可能的密钥构成的有限集;
4)对每个k ∈K, 存在一个哈希函数h: x->y;
ͼK,存在一个hash函数hk ͼ H,hk:
x→yͼ
二、简介
哈希的主要工作是将高维数据变为低维紧凑的二值码,即将复杂类型的数据用二进制串作为存储密码存储在计算机中,因此哈希表针对图像、视频或者文本数据库进行存储,实质是对原始数据的有损压缩。
分类: 无监督哈希和有监督哈希;
过程:key -> hash值 -> 桶号code ->存储<code,value>;
目的:让hash值均匀分布在桶中,使查找的消耗降到O(1);
优点:数据存储和查询消耗的时间大大降低;
缺点:消耗比较多的内存;
三、常见哈希函数
直接定址法
1、除留余数法
设哈希桶大小为m,取一个接近m的数p, hash(key) = key % p;
随机数法
折叠法
数学分析法
平方取中法
2、乘法散列法
hash(key) = floor( m * ((key *A) mod 1))
设w为计算机字长,0<A<1,
取 s = A * 2w, key *s 为2w位数,前w位为整数部分,后w位为小数部分;
再看上述散列,哈希函数的运算为取s的后w位的前几位为散列值。
3、全域散列法
解释:
为防范恶意存储数据到相同槽,哈希函数被设置为从哈希函数集中随机选取。
Data ==> { hash_f1,hash_f2,hash_f3,…} ===> hashcode
一个常见方法:
取