基础知识学习1之哈希(Hash)
2017-01-15 21:10
681 查看
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]
机器的删除与添加
节点(机器)的删除
以上面的分布为例,如果NODE2出现故障被删除了,那么按照顺时针迁移的方法,object3将会被迁移到NODE3中,这样仅仅是object3的映射位置发生了变化,其它的对象没有任何的改动
节点(机器)的添加
如果往集群中添加一个新的节点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
相关文章推荐
- SQL的详细语法介绍——对于学习数据库最基础知识一
- 路由器基础知识点汇总学习
- XML基础知识学习七(XML 浏览器(Netscape、Explorer))
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(三)对象的克隆
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(二)BREAK和CONTINUE的区别
- SQL的详细语法介绍——对于学习数据库最基础知识一
- FPGA学习--基础知识
- [学习笔记]servlet基础知识整理
- XML基础知识学习六(XML 确认)
- 网络基础知识讲座之五:学习生成树协议
- SQL的详细语法介绍——对于学习数据库最基础知识二
- 学习Windows程序必须知道的基础知识
- C++学习笔记——基础知识
- XML基础知识学习九(XML数据岛)
- XML基础知识学习三(XML 语法)
- DOS命令初学者基础知识学习
- XML基础知识学习四(XML元素)
- XML基础知识学习一(如何使用XML?)
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(一)
- 数据库基础知识学习