算法图解之散列表

数组和链表都被直接映射到内存,但散列表更复杂,它使用散列函数来确定元素的存储位置。在你将学习的复杂数据结构中,散列表可能是最有用的,也被称为散列映射、映射、字典和关联数组。

散列表的速度很快。你可以立即获取数组中的元素,而散列表也使用数组来存储数据,因此其获取元素的速度与数组一样快。
你可能根本不需要自己去实现散列表,任一优秀的语言都提供了散列表实现。Python提供的散列表实现为字典,你可使用函数dict来创建散列表。

总结一下,散列表适合用于:

  1. 模拟映射关系
  2. 防止重复
  3. 缓存/记住数据,以免服务器再通过处理来生成它们。

冲突:两个键映射到同一个位置。
最简单的办法如下:如果两个键映射到了同一个位置,就在这个位置存储一个链表。但是当要存储的键都是以a开头,那么会导致只有一个位置上有值,且这个链表会很长,散列表的速度回很慢。

引出:

  1. 散列函数很重要。前面的散列函数将所有的键都映射到一个位置,而最理想的情况是,散列函数将键均匀地映射到散列表的不同位置。
  2. 如果散列表存储的链表很长,散列表的速度将急剧下降。然而,如果使用的散列函数很好,这些链表就不会很长!

性能:需要避免冲突
方法:较低的填装因子;良好的散列函数。(一旦填装因子超过0.7,就该调整散列表的长度。)

-----------------------本文结束感谢您的阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%