【发布时间】:2011-05-30 05:48:48
【问题描述】:
我有以下散列函数,我正在尝试用我的方法来反转它,以便我可以从散列值中找到键。
uint Hash(string s)
{
uint result = 0;
for (int i = 0; i < s.Length; i++)
{
result = ((result << 5) + result) + s[i];
}
return result;
}
代码在 C# 中,但我认为它很清楚。
我知道对于一个散列值,可能有多个键,但我的目的不是找到它们,只要一个满足散列函数就足够了。
编辑:
函数接受的字符串仅由数字 0 到 9 以及字符“*”和“#”组成,因此 Unhash 函数也必须遵守此标准。
有什么想法吗?谢谢。
【问题讨论】:
-
输入的字符串长度有限制吗?
-
不是作业,我想限制不要超过十几个字符