as火柴人

导航

算法

算法范式

  http://www.cnblogs.com/gaochundong/p/algorithmic_paradigms.html

Dijkstra算法:

  https://www.jianshu.com/p/ff6db00ad866

  •  P7 哈希表

  动态集合:能做增删改的集合,静态集合:只能做查询的集合。

  哈希函数对应映射一对一。而不能多对一,如果有多对一的情况就发生了碰撞

碰撞的解决方法:链表

  简单均匀哈希:每一个集合S都有相同的集合机会加入T里面任意一个槽。且每个键之间独立

  键和槽:

好的函数函数:键的分布特性不会影响到插入槽的均匀性。

除法哈希:m=n mode(d),d是槽的个数;  

m选择质数,且不靠近2或10

乘法哈希函数:A不要取2的幂次的数,

二进制数的特征要么高位很多相同,要么低位很多相同??什么意思

这个乘法运算就相当于是把整个 哈希表分成r份,然后以A倍的乘积来让值在这个哈希表上循环找值,最后确定下来。

开放寻址法:系统地探查序列直到找到空槽为止;要求n<=m,不然会溢出

链表法需要在原本的表里面添加很多链表

搜索也用相同的探查列表,而且搜索的次数不会超过最长探查次数

线性探查:缺点:容易出现集群性,某一块区域被占满,而且这个区域会越来越长:i=1:一次集群性;i=2,二次集群性。

用两个哈希函数做二次哈希,保证h1(k),然后不断叠加h2(k),m=2r次幂,h2(k)为奇数就可以让所有的槽都分配到。

 

posted on 2019-03-01 17:05  as火柴人  阅读(142)  评论(0)    收藏  举报