【发布时间】:2013-11-28 14:42:25
【问题描述】:
我最近一直在研究 Python 的字典(我相信它们在其他语言中被称为关联数组)并且对其键的一些限制感到困惑。
首先,dict 键必须是不可变的。当我查看它背后的逻辑时,答案是字典像哈希表一样工作来查找键的值,因此不可变键(如果它们是可哈希的)可能会改变它们的哈希值,从而在检索值时导致问题.
我明白为什么会这样,但我仍然对使用哈希表的意义感到有些困惑。如果您只是不散列键并测试真正的相等性(假设相同构造的对象比较相等),则只需使用两个列表即可复制字典的大部分功能而不受此限制。
所以,我想这是我真正的问题 - 使用哈希而不是相等来查找值的基本原理是什么?
如果我不得不猜测,这可能仅仅是因为比较整数非常快且经过优化,而比较其他类的实例可能不是。
【问题讨论】:
-
@FrédéricHamidi O(n log n)??你是怎么知道的?即使对于 R/B 树,项目访问也只有 O(log n),如果它的时间复杂度为 O(n log n),那么使用 hash map 有什么意义
-
@JoeC,凭记忆 :) 我在这里可能错了,我正在四处寻找以仔细检查。 我的错,我能找到的最坏情况是 O(log n / log log n)。我的立场是正确的。
-
@FrédéricHamidi 同样,O(n) 比 O(n log n) 好 => 从你所说的来看,列表比哈希表更快:)
-
@JoeC,是的,你是对的,我想知道我是从哪里得到这种复杂性的。看起来我对排序复杂性感到困惑......无论如何,现在我不会再犯同样的错误了:)
标签: python dictionary hash