基础知识学习1之哈希(Hash)

来源:互联网 发布:is语音淘宝客服可信吗 编辑:程序博客网 时间:2024/06/06 01:20

1.理解

1.1 基本概念理解

哈希, Hash的音译,也有翻译做“散列”。 可以理解为映射的一种。T[hash[x]]=x, 通过hash函数将值x转换成T对应的下标,然后将值写到该位置.
比如除法hash: 10%9取余1,将10存在T[1].

hash平均时间要比链表快,同时可以节省比数组更少的空间。
假设关键字集合为K,关键字域为U,空间可以将至O(|K|).

hash使用的场景是数的集合比数的域小的多的情况,比如数为{1,10000},两个数,但是域是10000,2<<10000; 而数的集合{1,2},域为2=2,就没必要用hash了,使用直接寻址技术就可以了。

1.1.1 碰撞

两个关键字被映射到同一个槽(下标),称为碰撞

hash函数的目标之一:尽可能减少碰撞

1.1.2 直接寻指法

直接寻址技术,直接寻址表

T[k]=k

1.1.3 链接法

把散列在同一个槽中的所有元素都放在一个链表中

问题: 最坏情况是所有元素hash到一个槽。但使用单链表的时候,搜索和删除都很慢,O(n)

1.1.4 开放寻址法

将所有的元素都放在散列表中。 当查找一个元素的时候,需要检查所有的表项。

插入: 先hash到指定的槽,如果槽有元素,就判断下一个槽,直至找到空槽存放元素。

好处:不用指针,节省空间,

问题:散列表会出现填满的情况,以至于不能插入任何元素。
删除麻烦

1.2 相关技术

Hash function: hash函数。 常用的有:
(1) 除法散列法:hash(k)=k mod m
(2) 乘法散列法:hash(k)=INT( m(kA-INT(kA/m))

Hash table:散列表, 算法导论十一章专门讲了散列表。 Hash table中的效率很高,查找元素的期望时间为O(1),hash table 是普通数组概念的推广。Hash table但是最坏时间和链表都是一样,都是O(n)

问题:会出现最坏情况

类是的应用还有hashMap:期望查找时间很快

Hash算法:

hash在密码领域的应用:把任意长度的输入,通过散列算法,变换成固定长度的输出,输出散列值。

2.扩展:

2.1 一致性哈希算法

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用

详细见[1]

机器的删除与添加

  1. 节点(机器)的删除
    以上面的分布为例,如果NODE2出现故障被删除了,那么按照顺时针迁移的方法,object3将会被迁移到NODE3中,这样仅仅是object3的映射位置发生了变化,其它的对象没有任何的改动
  2. 节点(机器)的添加
    如果往集群中添加一个新的节点NODE4,通过对应的哈希算法得到KEY4,并映射到环中

其他学习总结:

【1】http://blog.csdn.net/xubo245/【2】https://github.com/xubo245/

参考:

【1】http://blog.csdn.net/hello_bravo_/article/details/54020311?locationNum=4&fps=1
0 0
原创粉丝点击