【发布时间】:2017-03-22 07:01:17
【问题描述】:
所以我正在处理一个包含 400 个数据值的文件,这些数据值都是整数,值从 4 到 20,000 不等。我将所有这些加载到一个大小为 400 的数组中。还有另一个大小为 600 的 ListNodes 的空数组,我会将数据移动到其中,但使用的是自写的哈希码(我将在下面发布)。
因为长度为600的数组中的每个索引都有一个ListNode在里面,如果有冲突,那么数据值会添加到ListNode的后面。我还有一个方法可以返回空数组的百分比。但基本上由于我将 400 个数据值加载到大小为 600 的数组中,我可以拥有的最小百分比为 33.3%,因为如果没有冲突,则数组中的 400 个插槽被占用,200 个为空,但这不是这样的:
return (num+123456789/(num*9365))%600; //num is the value read from the array of 400
那个 hashCode 给了我 48.3% 空值的最佳结果,我需要它至少低于 47%。有什么建议或解决方案来改进这个 hashCode?我将不胜感激任何帮助。如果您需要更多信息或详细信息,请告诉我。谢谢!!!
【问题讨论】:
-
您可能想研究一个最小的完美散列函数(例如sux.di.unimi.it/docs/it/unimi/dsi/sux4j/mph/…)。该库似乎还有许多其他实现:sux.di.unimi.it/docs/it/unimi/dsi/sux4j/mph/…