有上万个学生的信息(年龄、国籍、学号),想用国籍和年龄做key,我现在有个初步的想法:
设定p q r三个固定的素数,都大于国籍的数量,用国籍的前三个字母的 ASCII 值,每个都乘一个唯一的素数来保持三元组的唯一性。
F(n) = n[ 0 ] * p + n[ 1 ] * q + n[ 2 ] * r
加上年龄 (a) ,用整数模数映射到范围 [0, B) 上,来保证正好用 B 个buckets
F((a,n)) = ( F(n) + a ) % B
但是这种方法会产生冲突,因为 22 岁的Malians 和 Maltese就映射到同一个了,不知道有没有其他方法。