相关疑难解决方法(0)

为什么XOR是组合哈希的默认方式?

假设您有两个哈希H(A)并且H(B)您想要将它们组合在一起.我已经读到了将两个哈希值组合在一起的好方法XOR,例如XOR( H(A), H(B) ).

我发现的最佳解释在这里简要介绍了这些哈希函数指南:

对具有大致随机分布的两个数字进行异或,导致另一个数字仍具有大致随机分布*,但现在取决于这两个值.
...
*在两个数字相结合的每个比特,一个输出0,如果两个比特相等,否则为1.换句话说,在组合的50%,1将输出.因此,如果两个输入位各有大约50-50的机会为0或1,那么输出位也是如此.

你能解释为什么XOR应该是组合散列函数(而不是OR或AND等)的默认操作的直觉和/或数学吗?

hash cryptography bit-manipulation probability xor

135
推荐指数
5
解决办法
5万
查看次数

perl6 set opertions中用户定义的比较函数

Perl6文档表明,当比较一组中的两个项目时,===使用.这是来自perl6文档的引用:

允许任何类型的对象/值作为设置元素.在集合中,每个元素都保证是唯一的(在某种意义上,没有两个元素会与===运算符进行正比较)

我想知道是否可以使用用户定义的函数而不是===?例如,我如何使用~~而不是===确定集合中的2个元素是否"相等".

我试图解决的问题是:集合A有一些名字和一些姓氏,但是所有的小写和没有标点符号,而集合B有许多名字和姓氏以任何顺序混合,并且那里可能是名称附带的标点符号,可能是大写或小写.我想知道集合A中的人(表示为具有一个特定名字和姓氏的A的子集)是否出现在集合B中.在这种情况下,===由于集合B中的字母案例和标点符号,我无法使用.

如果我可以使用~~而不是===,那么问题就会简单得多,因为我只需要确定A的子集是否也是B的子集~~.这类似于我之前提到的"置换匹配"问题.

非常感谢你 !

comparison set elements perl6

8
推荐指数
1
解决办法
140
查看次数

在Perl 6中使用具有对象键的哈希

我正在尝试Hash使用非字符串键,在我的情况下使用数组或列表.

> my %sum := :{(1, 3, 5) => 9, (2, 4, 6) => 12}
{(1 3 5) => 9, (2 4 6) => 12}
Run Code Online (Sandbox Code Playgroud)

现在,我不明白以下几点.

如何检索现有元素?

> %sum{(1, 3, 5)}
((Any) (Any) (Any))

> %sum{1, 3, 5}
((Any) (Any) (Any))
Run Code Online (Sandbox Code Playgroud)

如何添加新元素?

> %sum{2, 4} = 6
(6 (Any))
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
2
解决办法
372
查看次数