哈希算法学习
来源:互联网 发布:软件管理下载安装 编辑:程序博客网 时间:2024/06/02 12:44
今天学习NoSql数据库的时候,学习到了memcached,但是对于哈希算法不太了解,这里进行学习。
什么是哈希算法?
把任意的二进制字符转换成固定长度的二进制值得一种算法。了解哈希算法前要了解散列表。
什么是散列表?
也叫做哈希表,根据key来访问的一种数据结构;这个key->value这个映射称为散列函数,存放的记录叫做散列表!
通过一个例子来理解
假设我们要存70个元素,然后申请了100个空间地址来存这70元素,那么70/100=0.7就是负载因子,明显,这个负载因子越小越好。我们的散列函数会随机地把这70个元素平均地分配到个个位置去,因为是随机分配的,不排除会出现有相同的两个元素都分配到同一个位置去的情况,即不同的key指向同一个地址,虽然散列函数已经够优秀,但是还是有可能出现这种情况的。这种情况就叫做哈希冲突。总结就是:散列函数是一个固定的算法函数,将元素随机分配到散列表中。
哈希冲突怎么解决?
1.好的散列函数,要求好的算法
2.合适大小的负载因子
3.好的处理冲突的方法,即是发生冲突后的一个好的重新分配方法
散列函数的一些常用算法
1.直接寻址法:就是取key或者key的某个函数,作为地址来寻找。
2.数字分析法:比如一组数据表示员工生日,年月日,大家都是90后,那199X年XX月XX日,若用199X作为散列地址,就很容易冲突,如果用比较不同的XX月XX日的XXXX来作为散列地址,就不容易冲突;
3.平均取中法:取关键字的平方的中间几位作为散列表地址。
4.折叠法:把关键字分成几段,把这几段加起来,作为地址值
5. 随机数法:即取随机数;如果关键字长度不统一,用这个方法不错
6. 除留余数法:mod一个比散列表长度(key的长度)小的数,取余数作为地址
了解了以上的定义,我已经对哈希表有了一个比较好的了解。
- 哈希算法学习
- 算法学习笔记15-哈希算法
- FNV哈希算法【学习】
- 哈希算法原理学习
- MD5哈希算法学习
- 哈希算法的学习
- 系统学习hash算法(哈希算法)
- 系统学习hash算法(哈希算法)
- 【算法学习】Consistent Hash 一致性哈希
- 一致性哈希算法学习笔记
- PHP学习之memcached一致性哈希算法
- 算法学习 - HashTable开放地址法解决哈希冲突
- 经典算法学习——哈希查找
- 一致性哈希算法学习及JAVA代码实现分析
- 一致性哈希算法学习及java代码实现分析
- 一致性哈希算法学习及JAVA代码实现分析
- python学习——hashlib.md5摘要算法(哈希算法)
- 算法学习
- LeetCode-15 3Sum(求3数和为零的情况总数)
- android setVisibility三种状态值的解释
- leetcode-15 3Sum
- leetcode第88题-Merge Sorted Array
- rtcm 报文
- 哈希算法学习
- Mac技巧
- Linux下端口被占用解决
- 以MyBatis+SpringMVC3.0实现的,借鉴了Hibernate设计思想,采用封装、抽象、继承的设计思想,做到了数据与相应的操作的高内聚低耦合的实现
- 作业3.24
- Javascript的常用语句
- 自定义控件系列之应用篇——自定义标题栏控件
- NDK开发环境搭建成功跑起JNI
- 机器学习算法(二)——决策树分类算法及R语言实现方法