散列表(二)

点击蓝字“莫名Coder”关注我哟

加个“星标”,每日良时,好文必达!

  散列表

散列表冲突

在我们学习的大多数语言中,提供了散列表实现,你不用知道它们如何实现,有鉴于此不必讨论内部原理,但你需要知道散列表的性能,如果想知道散列表的性能,那么搞清楚什么是冲突?

问题:超市中,我们将苹果的价格存储到散列表中,分配的是第一个位置,接下来,将香蕉的价格存储到散列表中,分配第二个位置。一切顺利,但现在你要将梨的价格存储到散列表中,分配给你的是第一个位置。不好,这个位置是苹果的,那么就会覆盖苹果的价格,这种情况就是冲突,给两个键分配的位置相同。

如何处理?最简单的办法,如果两个键映射到了一个位置,那么这个位置存储一个链表。

如果说链表很短,那么查询速度就会很快,但是,如果很长,那么就很慢。

散列表性能

前面所学中,简单的查找我们运行时间就是线性时间,二分查找的速度更快,则是对数时间,在散列表中查询它的时间为常量时间O(1)。

在最糟的情况向 ,散列表所有操作的运行时间是O(n)---线性时间。在平均情况下,散列表的查找速度和数组一样快,在最糟的情况下,散列表的各种操作速度都很慢,因此在使用散列表的时候,避开最糟情况就很重要。避免冲突需要有:

  • 较低的填装因子

  • 良好的散列函数

小结

  • 在编程语言中,我们不需要事先散列表,大多数语言已经提供好了散列表的实现。

  • 散列表是一个功能强大的数据结构,其操作速度快,还能让你以不同的方式建立数据模型。

  • 散列表的查询,删除,插入都很快

  • 散列表适用于模拟映射关系

  • 散列表可用于缓存数据

  • 非常适用于防止重复

---END---

莫名Coder

关于 Python 都在这里

散列表(二)_第1张图片

你可能感兴趣的:(散列表(二))