主要观点:
- 介绍了哈希(Hashing)的相关概念,包括哈希函数将数据结构转换为整数,以及哈希函数可能存在碰撞等情况。
- 讨论了处理哈希碰撞的方法,如规范化(Canonization)、同态(Homomorphisms)和不变量(Invariants)等。
- 以多种数据结构为例,如集合、列表、树等,阐述了在不同情况下如何应用这些方法来处理哈希相关问题。
- 提及了一些相关的技术和工具,如 Python 的
Fraction
、sys.intern
等,以及一些研究论文和资料。
关键信息和重要细节:
- 哈希函数可能存在碰撞,好的哈希函数应尽量减少相同键的碰撞。
- 规范化方法是将结构简化为规范形式再进行哈希,如将分数
(4,8)
简化为(1,2)
,对集合可通过排序元素来实现规范化。 - 同态方法是找到从代数理论到整数的同态,如利用
xor
、or
、and
等整数运算构建哈希函数,类似的有布隆过滤器(Bloom filters)。 - 不变量方法是发明一些尊重结构对称性的不变量,如集合的大小、变量计数的多重集等,可用于解决哈希相关问题。
- 对于具有α等价性的树等结构,需要特殊的哈希处理方法,如文中的
Term
类实现了α等价性的比较和哈希。 - 不同的数据结构在哈希处理上有不同的特点和方法,如集合可通过 Patricia 树等方式进行哈希。
- 哈希和哈希一致性(Hash consing)相关,在某些情况下使用内部化(interned)数据可提高效率。
具体示例:
print(hash((4,8)))
和print(hash((1,2)))
结果不同,说明默认哈希函数不尊重分数的等价性。- 通过
from fractions import Fraction
可将分数规范化后哈希,结果相同。 - 对集合进行排序后哈希,不同顺序的相同元素集合哈希结果相同。
- 文中的
Term
类实现了α等价性的比较和哈希,如f(x) == f(f(x))
为True
,f(x) == f(y)
为False
等。
相关资源和论文:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。