1、直接寻址表:时间复杂度O(1)
一个对象的关键字对应表中一个下标,表中存储的指向该对象的指针。
散列表学习记录
**缺点:**若对象关键字很多,导致需要建立的表很大,当存储的对象不多时,空间浪费。

2、散列表:时间复杂度O(1)
在直接寻址方式下,具有关键字k的元素被存放在槽k中。在散列方式下该元素存放在槽h(k)中;即利用散列函数h,由关键字k计算出槽的位置。这里,函数h将关键字的全域U映射到散列表T[0…m-1]的槽位上。
h:U->{0,1,…,m-1}
散列表学习记录
由于U>=m,因此冲突无法避免,但可以选择较好的散列函数h尽量减少冲突。

链接法解决冲突:
将散列到同一槽中的所有元素都放在一个链表中,如图,槽j中有一个指针,指向存储所有散列到j的元素的链表的表头,如果不存在这样的元素,则槽j中为NULL。
散列表学习记录
此时散列表是一个链表指针数组。

3、散列函数:
3.1、除法散列法:
通过取k除以m的余数,将关键字k映射到m个槽位中的某一个上。即散列函数:
h(k) = k mod m

3.2、乘法散列法:
散列表学习记录
4、开放寻址法:

参考资料:算法导论11章 散列表

相关文章:

  • 2021-09-15
  • 2021-12-09
  • 2022-12-23
  • 2021-12-09
  • 2021-11-14
  • 2021-08-14
  • 2021-09-03
  • 2021-07-20
猜你喜欢
  • 2021-10-04
  • 2021-07-03
  • 2021-11-10
  • 2022-12-23
  • 2021-07-28
  • 2021-12-18
  • 2022-12-23
相关资源
相似解决方案