【发布时间】:2016-11-02 14:06:24
【问题描述】:
我完全熟悉哈希表和哈希的工作原理,但我正在尝试完全理解 O(1) 的来源。
set1 = {'s','t'}
print('x' in set1)
print('s' in set1)
set2 = {'s'}
print('s' in set2)
我被告知要检查's'是否在set1中,如果将检查's'的哈希的内存分配,并检查它是否在set1中O(1)并返回布尔值。因此有两个 O(1) 操作,但我的问题是:哈希实际上是如何深入工作的。我的意思是,当您散列's' 时,该散列是否具有set1 和set2 之类的内容,并且您正在检查set1 是否是set1 或set2,或者是否每个集合有一个不同的 's' 哈希值,您正在检查每个不同集合的 's' 哈希值。
【问题讨论】:
-
我对你的问题有点困惑……你能试着改进一下吗?
-
散列
's'意味着做hash('s')。set1和set2与此无关。set类型使用该操作的结果来获取其内部表中的索引。 -
所有可散列对象都有散列方法。该集合使用散列来确定对象在集合中是否唯一。当您测试
'x' in set1时——您正在测试'x'是否是set1的成员 -
" 在一个集合中,Python 会跟踪每个哈希值,当你 if x in values: 时,Python 将获取 x 的哈希值,在内部结构中查找它,然后只将 x 与与 x 具有相同哈希值的值进行比较。”这是我在可能的重复页面中寻找的句子,但我不完全理解。有人可以重新措辞吗?你如何只比较具有相同哈希的事物?这就像像列表一样比较集合中的所有内容,但只检查它们是否相同。 o > o
标签: python set complexity-theory