【问题标题】:Why even have hash tables?为什么还要有哈希表?
【发布时间】:2021-06-03 14:21:55
【问题描述】:

哈希表允许使用哈希函数将键映射到值。这里哈希函数实际上计算映射到特定值的键的索引。但我就是想不通为什么我们一开始就使用哈希表?为什么需要哈希表?地图/字典不够好?为什么不声明一个字典(Python 中的{'key1': 'value1'})并在需要哈希表的地方使用它?我读了很多关于它的东西,但仍然不明白。你能帮我理解一下吗?

【问题讨论】:

  • 非常简短的回答 - 它是一组相似的键及其值。值可以是列表或计数或其他内容,具体取决于情况。如果你提到你不明白的地方,那么我们可以详细说明。
  • 地图/字典是某种高级表示,它们使用低级数据结构来实现它(如哈希表、RB 树、AVL 树等)。
  • 您不需要实现哈希表,除非您确实需要它。例如,C++ 映射、Python 字典是在很多地方维护键值的非常好的替代方案。但是,您可能需要实现自己的哈希表,例如,如果您需要设计一个针对 w.r.t 进行优化的低级数据结构。一些约束。地图/字典是某种 API,您无法通过任何控制来提高性能。
  • @biqarboy:在 C++ 中,std::map 不是哈希表。你会想要std::unordered_map

标签: data-structures hashtable


【解决方案1】:

为什么需要哈希表,地图/字典不好

这就像问你为什么需要汽车发动机,难道汽车还不够好?发动机是汽车的工作方式;当您驾驶汽车时,您只是看不到引擎。但是,如果您正在学习成为一名汽车工程师,那么您应该了解发动机的工作原理以及如何设计、制造和维护它们。

同样,哈希表是字典的工作方式,如果您正在编写使用字典的代码,您只是看不到哈希表。但是,如果您正在学习成为一名计算机科学家,那么您应该了解哈希表和其他数据结构的工作原理,以及如何设计、构建和维护它们。

【讨论】:

  • 特别是哈希表是字典的一种非常常见的实现。字典是一种抽象数据类型,允许通过键存储和查找值。字典也可以通过搜索树(如 BST 或 B-Tree,对哈希映射的不同权衡)有效地实现。我认为标准库中的 Dictionary 类型是基于 hashmap 的字典的共性无助于澄清区别。
  • @moreON 该问题专门引用了Python,其中内置的dict数据类型是使用哈希表实现的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2021-03-20
  • 2014-01-30
  • 2012-09-12
相关资源
最近更新 更多