哈希算法学习

    今天学习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的长度)小的数,取余数作为地址

了解了以上的定义,我已经对哈希表有了一个比较好的了解。

  

    原文作者:哈希算法
    原文地址: https://blog.csdn.net/a276012105/article/details/45195957
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞