u8,u8国际,u8国际官方网站,u8国际网站,u8国际网址,u8国际链接,u8体育,u8体育官网,u8体育网址,u8注册,u8体育网址,u8官方网站,u8体育APP,u8体育登录,u8体育入口
顺序查找是最简单的查找方式,需要对数据集中的数据逐个进行匹配,所以效率相对较低,不太适合大数据量的查找问题。
二分查找的查找效率很高,但是要求数据必须有序,而对数据排序通常需要更多时间开销。
哈希查找算法由于其查找速度快,查询、插入、删除操作简单等原因而获得了广泛的应用。很多问题本质上都是查找问题。解决查找问题,哈希算法是最好的选择。
哈希算法进行查找的基本原理是根据数据量预先设置一个长度为M的数组,使用一个哈希函数F并以数据的关键字作为自变量,得到唯一的返回值,返回值的范围为0~M-1,这样就可以利用哈希函数F将数据元素映射到数组的某一位下标并把数据存放在对应位置上。查找时,利用哈希函数F计算该函数应该存储在哪里,再到相应存储位置取出查找的数据。
例如:有一组数据3、11、8、6需要存储,哈希函数为F(x) = x%7,那么利用哈希函数F存储的数据如下表
然而,由于数据在通过哈希函数进行映射的时候,很难找到一个哈希函数,使得这些关键字不能映射到唯一的值,就会出现多个关键字映射到同一个值的现象,这种现象我们成为冲突。
解决哈希冲突的方法有很多,如链地址法、二次再散列法、线性探测再散列、建立一个公共溢出区等方法。其中,链地址法也成为桶。
链地址法存储数据的过程:首先建立一个数组Hash存储所有链表的头指针,由数据的关键字Key通过对应的哈希函数计算出哈希地址,找到相应的桶号,之后建立新的节点存储该数据,并把节点放到桶内链表的最后面或最前面。例如,F(x) = x%5,链地址法如图
这个解决冲突的方法对哈希函数的要求很高,如果哈希函数选的不好,哈希表的查找效率会退化为链表的查找,也就是顺序查找。