【发布时间】:2010-11-24 02:55:24
【问题描述】:
背景:
我正在处理整数序列 {0, 1, 2 ... , n} 的排列。 我有一个本地搜索算法,它以某种系统的方式将一个排列转换为另一个排列。该算法的重点是产生一个最小化成本函数的排列。我想处理从 n=5 到 n=400 的各种问题。
问题:
为了减少搜索工作,我需要能够检查我之前是否处理过特定的整数排列。我为此使用了一个哈希表,我需要能够为每个排列生成一个 id,我可以将其用作表中的键。但是,我想不出有什么好的散列函数可以将一组整数映射到一个键中,这样冲突就不会太频繁地发生。
我尝试过的东西:
我首先生成一个由 n 个素数组成的序列,然后将排列中的第 i 个数与第 i 个素数相乘,然后对结果求和。然而,即使 n=5,生成的密钥也会产生冲突。
我还考虑将所有数字的值连接在一起,并将结果字符串的整数值作为键,但即使对于较小的 n 值,id 也会很快变得太大。理想情况下,我希望能够将每个键存储为整数。
stackoverflow 对我有什么建议吗?
【问题讨论】: