编程语言
首页 > 编程语言> > 机器学习中的数值查找算法(3)——哈希查找算法

机器学习中的数值查找算法(3)——哈希查找算法

作者:互联网

原文链接:机器学习中的数值查找算法(3)——哈希查找算法 – 每天进步一点点 (longkui.site)

0.前言

前面介绍的查找算法均是基于有序序列的查找方式,哈希查找是通过计算元素的存储地址进行快速查找方式,它并不要求序列一定有序,可以通过如下四个步骤完成元素进行查找。

1.详细说明

哈希函数和哈希表的结构是哈希查找中最重要的两个因素,直接影响了哈希的查找速度。哈希表(Hash Table, 亦称散列表),是依据Key-Value构建的数据结构,Key由哈希函数产生,用以加快查找速度。

哈希函数的构造方法有很多,比如直接地址法、平方取中法、除数留余法、随机数法、数字分析法及折叠法等。

虽然可以通过上述6种方法产生相应的哈希值,但是随着数据量的增加,当超越哈希表的长度时,就可能产生数值冲突。例如,在除数留余法中,45687对10000 求得的余数是5687,但是用同样的方法55687 对10000 求得的余数依然是5687,则45687与55687的哈希值冲突,当两者同时出现的时候会导致误判或者误查找。

通过良好的哈希函数,可以减少一些冲突,但是冲突是哈希函数中不可避免的问题。哈希冲突的解决方法有很多,如开放定址法,再哈希法,链地址法等,它们的共同特征是在发生冲突之后,通过其他的数据结构或者其他方式解决冲突。

以链地址法为例,它的核心思想是将所有哈希值冲突的元素组成一个单链表,并将单链表的头指针存入哈希表元素中。例如,一组数值{19,23,3,56,10,17,12,29},哈希表的长度为5,哈希函数方法为除数留余法,则用链地址法处理冲突如下图所示:

通过链地址法虽然解决了冲突,但是平均查找长度也有所增加。例如,在上图的例子中平均查找长度为(1+1+2+1+1+2+1+2+3)/ 8 =1.75

 

标签:key,函数,算法,数值,地址,查找,哈希
来源: https://www.cnblogs.com/longkui-site/p/16650057.html