1

我有一个要求,我有一组事先不知道的字符串(例如“phy”、“link”、“maca”)

我有 2 个程序,我只有 7 位可以发送来传达有关字符串的信息。

如果我事先知道字符串,我可以说 "phy"=1 "link"=2 等等,但我想自动化这个,因为我在两个程序中都有 2 个函数,有某种编码方式等。

    private int getHash(String agent) {        
      return 0;
    }
    private String getAgentIDfromHash(int hash) {
      // TODO Auto-generated method stub
      return null;
    }

所以 int 将是一个 7 位的 int。我可以尝试对 String 中的所有字符进行异或运算,但我想知道是否有更好的方法?有什么想法吗?

4

2 回答 2

1

使用如此少的位数,您必须格外小心,以免发生冲突。最低限度是程序首先在内部检查它们是否不会与它们自己的(已知的)名称部分产生冲突。

理想的情况是两个程序都知道整个键集,以便它们可以生成 7 位 ID 到名称的映射,并且映射在双方都是相同的(无论键集是什么)。

于 2012-09-10T09:39:04.393 回答
1

标准的 StringhashCode函数被设计为分布良好。

所以你可以简单地从agent.hashCode()(你想要的那些,但最好是低位)中取 7 位。

请注意,无论您做什么,7 位的冲突概率都不可能非常低。2⁷ 只有 128。您可能应该找到字符串集的一个属性,以提供更好的解决方案。

于 2012-09-10T09:27:13.690 回答