【发布时间】:2014-12-09 17:58:29
【问题描述】:
我正在构建一个哈希表,其中的键是电话号码(这里是其中的一些):
6948060987
6960780800
6963208768
6944870406
6947279288
6953691771
6956094283
6947092062
6960086297
6947719197
6951516975
6957531584
6969211184
6963238579
6957054322
6952077216
6956907738
条目数将为 200、2000、20000 和 2000000,并且条目是唯一的。
关于桌子的大小,我在关注this的回答。
我将电话号码存储为char 的数组。我注意到所有数字都以 69 开头,所以我可以在哈希函数中跳过它们。
我的尝试是取数字的总和,然后对哈希表中的单元格数取模,但(在纸面上)这似乎是一个糟糕的函数,因为有很多冲突。
我应该如何修改我的哈希函数以获得更好的结果(更少的冲突)?
【问题讨论】:
-
您可以使用电话号码的整数表示形式作为其哈希值。
-
@AlexD 这样可以避免冲突...除非两个人碰巧共享一个电话号码,这可能会发生
-
所以你的意思是@AlexD 该函数会找到整数表示?乔恩的手机是独一无二的,我会更新的。
-
@G.Samaras 是的,只是
atoi或类似的。 -
@JonKiparsky 当电话号码已被选为哈希键时,两个拥有相同电话号码的人是不相关的。问题是为所选键选择一个好的散列函数。
标签: c hash hash-function