gpt4 book ai didi

.Net GetHashcode 位移操作

转载 作者:行者123 更新时间:2023-12-04 01:12:57 28 4
gpt4 key购买 nike

昨天我浏览了一些 .net 源代码,看到了一些 GetHashcode 的实现,其中包含以下内容:

(i1 << 5) + i ^ i2

我了解代码在做什么以及为什么。我想知道的是他们为什么使用 (i1 << 5) + i 而不是 (i1 << 5) - 一世。

我见过的大多数框架都使用 -i,因为这相当于乘以 31,这是素数,但 Microsoft 的方式相当于乘以 33,其中 11 和 3 作为因数,因此不是素数。

对此是否有已知的理由?有什么合理的假设吗?

最佳答案

我在 math.stackexchange.com 上问了同样的问题:Curious Properties of 33 .

数学家之间的猜想以及我对该主题所做的研究使我相信答案是这样的:

Okay, I found out why Microsoft uses 33. That's called the Bernstein Hash. It turns out that 33 has some magical properties that produce a good distribution of hash codes and there's very little theoretical knowledge as to why.



基本上,在熵和速度的比较中,伯恩斯坦做得足够好,而且非常活泼。提出常数 33 的丹·伯恩斯坦 (Dan Bernstein) 无法解释 33 的什么性质产生了如此好的散列分布。

已经写了几篇比较散列函数的论文,并在没有进一步解释使用 33 的好处的情况下证实了这一发现。此外,我找不到 Java 使用 31 的原因。迄今为止,这似乎是一个数学和编程之谜。

关于.Net GetHashcode 位移操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com