Hash Table

The Principle of Hash Table

Hash Table是一种使用组织数据hash functions以支持的数据结构quick insertion and search

设计哈希表的关键:

  • 1.哈希函数 哈希函数将取决于the range of key values和the number of buckets。也就是 values 总数和 buckets 的数量;
    理想情况下,完美的哈希函数将是密钥和桶之间的一对一映射。但是,在大多数情况下,哈希函数并不完美,它是the amount of buckets和之间的权衡 the capacity of a bucket。

碰撞解决方案

理想情况下,如果我们的哈希函数是完美的 one-one mapping,我们将不需要处理冲突。不幸的是,在大多数情况下,碰撞几乎都是inevitable。例如,在我们之前的散列函数(y = x%5)中,1987和2都分配给了bucket 2.这是一个collision。

冲突解决算法应解决以下问题:

如何在同一个桶中组织值?
如果为同一个存储桶分配了太多值,该怎么办?
如何搜索特定存储桶中的目标值?
这些问题都涉及到the capacity of the bucket,并the number of keys可能被映射到the same bucket根据我们的哈希函数。

让我们假设拥有最大密钥数量的存储桶具有N密钥。
通常,如果N是常量且很小,我们可以简单地使用a array 动态数组 来存储同一个桶中的密钥。如果N是可变的或大的,我们可能需要使用
height-balanced binary search tree 平衡二叉搜索树

实现

即实现 插入 查找 删除 动作
Insertion并且search是哈希表中的两个基本操作
remove an element 我们将首先搜索元素,然后如果元素存在则从相应位置移除元素。

design HashSet

    add(value):将值插入HashSet。 
    contains(value) :返回值是否存在于HashSet中。
    remove(value):删除HashSet中的值。如果HashSet中不存在该值,则不执行任何操作。
















































rockyzhang
3 声望0 粉丝

JavaDeveloper at ShangHai