1

事前に知られていない文字列のセットがあるという要件がありました(たとえば、「phy」、「link」、「maca」)。

文字列について通信するために送信するビットが7ビットしかない2つのプログラムがあります。

事前に文字列を知っていれば、 "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のすべての文字をXORすることはできますが、もっと良い方法があるかどうか疑問に思っていました。何かご意見は?

4

2 に答える 2

1

標準の StringhashCode関数は、適切に分散されるように設計されています。

したがって、単純に 7 ビットagent.hashCode()(必要なビットですが、できれば下位ビット) を取得できます。

何をするにせよ、7 ビットで非常に低い衝突確率を持つことはできないことに注意してください。2⁷ は 128 しかありません。おそらく、文字列セットのプロパティを見つけて、より良い解を有効にする必要があります。

于 2012-09-10T09:27:13.690 に答える
1

ビット数が非常に少ないため、衝突が発生しないように細心の注意を払う必要があります。最低限、プログラムは最初に、名前の独自の (既知の) 部分との衝突を作成していないことを内部的にチェックします。

理想的な状況は、両方のプログラムがキーセット全体を知っているため、7 ビット ID から名前へのマッピングを生成でき、マッピングが両側で同じになることです (キーのセットが何であれ)。

于 2012-09-10T09:39:04.393 に答える