我在网上看到如下的字符串哈希码算法,不知道这个算法可能做到任意字符串的返回哈希码都是不同的?
function HashCode(s: string): Cardinal;
var
i: Integer;
begin
Result := 0;
for i := 1 to Length(s) do
Result := 31 * Result + Ord(s[i]);
end;如果有其他更好的请赐教! 谢谢
function HashCode(s: string): Cardinal;
var
i: Integer;
begin
Result := 0;
for i := 1 to Length(s) do
Result := 31 * Result + Ord(s[i]);
end;如果有其他更好的请赐教! 谢谢
解决方案 »
- 请教各位如何转分?
- 请问要编写一函数返回record类型,是不是最好的办法就是传入record变量的指针?
- 如何判断字符是不是中文?
- 怎样在IE中显示,由delphi中的RichEdit写入数据库的BLOB数据?
- 用Delphi连接MSSQL
- 那位能具体解释一下SetWindowsHookEx
- DELPHI中怎么实现数据的批量打印(不使用报表)
- SPCOMM控件问题
- 如何在delphi建立可用sql查询的数据库
- 有什么办法可以加快ACCESS的速度
- 如何用sendmessage 点击 toolbar上的某一个按钮?
- adoquery的updatebatch问题,(行句柄引用了一个已被删除的行或被标识为删除的行)
返回值是 Cardinal,Cardianl的表数范围是0..4294967295
也就是最多4294967296个不同的值,而对于任意字符串,其组合形式可以是无限的范围。但是,我们可以把字符串,截断成多段,对每段进行哈希,把每段的哈希组合起来就可以扩展了。