我正在尝试为Euclid找到两个数字的GCD的方法编写一个简单的缓存机制:
gcd(a,0) = a
gcd(a,b) = gcd(b, a % b)
请注意gcd(a,b) == gcd(b,a)
。
对于缓存,我需要找到给定(a,b)
或(b,a)
的密钥,0 < a < 20
和0 < b < 20
。
当然,我可以使用key = a*20 + b
或key = a + b*20
,但这些是非对称的 - (1,5)
的关键字与(5,1)
不同。
我怎么能实现这个?
答案 0 :(得分:5)
首先,对数字进行排序。
key = a > b ? b*20 + a : a*20 + b;
答案 1 :(得分:2)
设c为min(a,b),d为max(a,b)。然后,您的散列函数c * 20 + d相对于a和b是对称的。