其他分享
首页 > 其他分享> > Hash,到底好用还是不好用?

Hash,到底好用还是不好用?

作者:互联网

  Hash是一种离数散算法,译名为哈希,它的基础概念就是映射,把数据按一定方式分类,存到一个数组里。如数组a[]{1,4,5,2,6,8,11},把这个a[i]存到Hash[a[i]^3%10],就是一种哈希,它的Hash存储方式就是a[i]^3%10。

  有人挺Hash,但有人不建议用Hash,这还得看具体问题和Hash的优缺点。

  Hash相较于数组而言,Hash的存储数有规律的,通过数据就能直接得到它存储的位置,查询这一操作是o(1)的,非常方便快捷。但是它的缺点是空间占用高,一般来说要开数组的2倍甚至更多。

  综上所述,如果用到多次通过数据找存储地址且空间足够的话,用Hash是很好的选择,但是Hash在写的过程中难免会遇到问题。

  我们都知道,a数组的每个数都对应着Hash数组里独一无二的地址,但是比如上面的例子,a[0]为1,在Hash数组里应存为Hash[1^3%10]也就是Hash[1],但a[6]的11,11^3%10同样为1,所以这无法保证每一个元素都有独一无二的地址,这叫做哈希冲突。

  哈希冲突的解决办法有两种,一种是往后寻找,直到找到空位就插入;另一种是用vector,在Hash[i]后挂一个“链表”,但其实就是一个vector,后面接着一连串的同哈希地址的数字。关于这两种用哪一种,第一种更适合于重复概率较小或数据本身较小,如果遇上数据又大,重复率又高,那么就用第二种。

 

The End

标签:11,10,Hash,哈希,到底,数组,好用,3%
来源: https://www.cnblogs.com/jnlc-yab0716/p/16468302.html