寻找一些散列函数,使字符串与int映射具有以下限制。
限制: 相同的字符串转到相同的数字。 不同的字符串会出现不同的数字 在一次应用程序运行期间,我从相同长度获取字符串,仅在运行时我知道长度。
有关如何创建哈希函数的任何建议吗?
答案 0 :(得分:4)
哈希函数永远不会保证两个不同的值(在您的情况下为字符串)产生不同的哈希码。但是,相同的值将始终产生相同的哈希码。
这是因为信息丢失了。如果你有一个长度为32个字符的字符串,它将有64个字节(每个字符2个字节)。 int
哈希码有四个字节。这是不可避免的,称为碰撞。
注意:Dictionary<Tkey,TValue>
在内部使用哈希表。因此,它实现了冲突解决策略。请参阅MSDN上的An Extensive Examination of Data Structures Using C# 2.0。
以下是dictionary.cs的当前实现。
答案 1 :(得分:3)
您不会找到一个散列算法来保证不会为不同的字符串返回相同的整数。根据定义,哈希算法存在冲突。世界上有可能的字符串比可能的32位整数要多得多。
答案 2 :(得分:3)
不同的字符串会转到不同的数字。
字符串数量多于数字,因此在不限制输入集的情况下,这是不可能的。你不能将n
只m
个n > m
方箱放入{{1}},而且至少有一个方框不能包含多只鸽子。
答案 3 :(得分:1)
String.GetHashCode函数不适合您的需求吗?