我已经了解了哈希表和开放地址技术。如果你想在大小为13的哈希表中插入键值18、32、44:
由于索引5上已经有东西了,所以你会遇到碰撞。
如果使用线性探测,可以使用
如果删除32,然后想要删除44怎么办?首先查看
如果需要在索引6处插入另一个键,则该键将覆盖哈希表中的"标记"。
你可以使用什么来标记一个索引-表示这里曾经有一个键,但已被删除-以便继续查找下一个索引?你不能只写null或0,因为这样要么认为键已被删除(null),要么认为值为0的键已经覆盖了44。
18 gets index 5 (18 modulus 13 = 5)
32 gets index 6 (32 modulus 13 = 6)
44 gets index 5 (44 modulus 13 = 5)
由于索引5上已经有东西了,所以你会遇到碰撞。
如果使用线性探测,可以使用
hashfunction = (key+i) modulus N
,其中i = 0,1,2..,直到在哈希表中找到一个空位。然后,在索引7处插入44。如果删除32,然后想要删除44怎么办?首先查看
hashfunction(44)=5
,这不是44,然后hashfunction(44 + 1) = 6
,这是空的。那么你可能认为44已经被删除了。那么如何标记哈希表中的位置,表示该位置实际上并非为空,但不包含键,并且应该继续在下一个索引处查找44?如果需要在索引6处插入另一个键,则该键将覆盖哈希表中的"标记"。
你可以使用什么来标记一个索引-表示这里曾经有一个键,但已被删除-以便继续查找下一个索引?你不能只写null或0,因为这样要么认为键已被删除(null),要么认为值为0的键已经覆盖了44。