Hash映射理解

先说数组,数组优点之一:能通过索引很快定位到值,hashmap  就是利用了数组这个优点。

对比:

        线性映射:定义一个数组 ,数组的元素是结构体,结构体包括 一对键,值。

                         伪代码表示   a[0] = struct{ "Bill" ,5} ,a[1] =  struct{ "KK" ,6}

                         这样我们就可以通过键来找值,也就是先遍历找到“bill”,在通过bill的索引找到5。

                         这种方法最慢(ps:平均找n/2次,n为数组元素个数)

       Hash映射:线性映射之所以慢,是因为你要遍历找Bill,这会花费很长时间。如果说能快速定位到Bill

                         那速度将会大大提高,那怎么样实现呢?

                         方法:

                         Bill------------------------------>Hash函数------------------------------->索引,将Bill 对应的值存入这个a[索引]

                         取得时候也一样,通过Hash函数定位到索引,取出值。

                         这样就将       线性映射遍历的时间                      转换                            Hash函数运行的时间

                         如果数组越长  线性映射遍历的时间  会大大增加 ,但对Hash函数却影响不大,大大缩短时间。

                                       hash函数特点  :                                                              

  •                                输入x可以是任意长度的字符串
  •                                输出结果即H(x)的长度是固定的
  •                                计算 H(x) 的过程是高效的(对于长度为 n 的字符串 x ,计算出 H(x) 的时间复杂度应为 O(n) )
  •                                输入不同的值,出来的也必须不同。
  •                                不能通过输出的值反推输入的值

                                       hash函数构造 :

                                        不会! 调用库他不香吗

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值