开放寻址法

开始之前先引用一个牛人对开放寻址法的介绍,http://blog.csdn.net/shaobingj126/article/details/8156675。在此基础上,本文进行更为准确更为恶心地补充说明。在进行坑位选择时,顾客对所有的坑位有一个喜好排序,然后按照特定排序方法,尽量选择最喜欢的坑位,检查里面是否有人,然后进行蹲坑,这就是进行insert操作。而search,可以认为是有人来厕所找人,他知道被找人的喜好,然后按照被找人的喜好,依次查找,如果找到某个人,可以返回位置信息。如果按顺序找到一个“干净”的坑位,就之间返回要找的人没在厕所。“干净”的坑位可以理解是没有人使用过该坑位。假设上厕所的人都不冲厕所,即如果有人用过某坑,会有一个标记,该坑没有记录使用者的信息,只标记被使用过了,而且现在没人,即这编码被insert过,而且又delete掉了。尽管坑可能被用过,但是只要按照喜好顺序,只要发现没人,顾客就会选择这个坑位,被insert到这个位置。而找人时,发现脏的没人的坑位,需要继续寻找,因为可能被找的人已经离开厕所了,也可能之前有人,被找的人在下一个位置,因此直到找到“干净”的坑位,确定,目前厕所里面没有要找的人。
坑位编号是0,1,……m-1,但是喜好编号是另一个顺序h(k,0),h(k,1),……h(k,m-1),两个集合是一一映射,但是不是按顺序对应的。常用的对应算法有一下几种。
线性探查
h(k,i)= (h(k)+i)modm 。该算法相当于,通过某种映射首先选择某个最喜欢的坑位,然后依次选择下一个坑位,到了m-1,再回到初始0号坑位,一共有m种不同的喜好顺序。
凭我们的历史经验可知道,当这个坑被选择时,相邻的坑位被选择几率会很大,《算法导论》中说某坑位前有i个位置都被占了,则该位置为下一个被占用的概率是(i+1)/m,没有想清楚为什么。于是乎有了下面
二次探查
h(k,i)= (h(k

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值