有没有办法,我可以写下一行,比当前表达式更有效?
Math.abs(((a*k + b) % P) % m);
P
是常数素数
m
是非负数,是 2 的幂
a
和b
是随机非负数
注意:需要说明的是,这不是我在分析过程中发现的热点,我想要改进。我的兴趣是寻找是否有一种方法可以更好地编写表达式(在效率方面),例如,在位操作方面具有更好背景的人可能很容易知道。
最佳答案
要总结评论链,您可以这样写
(a * k + b) % P & (m - 1)
它不等同于原始表达式,但无论如何满足相同的要求。它以不同的方式处理 a * k + b
为负数的情况(因为 k
为负数或因为换行),但在某种程度上仍然适用于哈希功能。
在这个新表达式中,唯一剩下的模运算是常量,任何受人尊敬的编译器都按照与常量除法优化相同的方式对其进行优化。
关于java - 用整数乘法和取模改进表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358967/