python - 将对象的散列定义为其成员散列的总和

标签 python hash

我有一个类表示图中的无向边。每条边都有两个成员 vertex1vertex2 代表它连接的顶点。问题是,一条边可以指定两个方向。我现在的想法是将边的散列定义为其顶点散列的总和。这样,方向不再起作用,散列将是相同的。这有什么陷阱吗?

最佳答案

我不得不解决一个类似的问题,发现使用散列的总和作为散列会导致太多的冲突。哈希总和的分布不够分散。

我发现使用哈希的乘积会导致更少的冲突。这当然取决于各个顶点的哈希值的性质。

设置一个测试台并测试一些对称哈希函数,然后根据冲突选择最佳函数。

你可以试试

h(x,y) = x+y
h(x,y) = x*y
h(x,y)  = x * y + (x ^ y)
h(x,y) = x *y + x + y

其中 x^y = min(x,y)

关于python - 将对象的散列定义为其成员散列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3021868/

相关文章:

python - 'str' 对象没有属性 'execute'

Python PGU 库 - 如何安装它?

ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试?

python - 无法写入文件

python - 按随机事件对数据帧进行分组,并使用组计数设置一个新列

c# - 线性哈希实现

.net - String 和 Stream 的 .NET MD5 Hash 之间的区别

perl - 当尝试访问未定义的哈希键时,让 Perl 喊叫

ruby - 使用 `Hash#fetch` 优于 `Hash#[]` 的好处

python - 根据 numpy 数组中的中心索引设置周围 block