3

私はPython-2.6を使用しています。ハッシュ関数についての知識はほとんどありません。

CRC ハッシュ関数を使用して、「128.0.0.5」のような IP アドレスを範囲 [0, H) にハッシュしたいと考えています。現在、私はやろうと考えています

zlib.crc32('128.0.0.5')%H.

これでいいですか?いくつかの質問があります。あなたは試して答えることができます...

  • 違いはありますか。「128.0.0.5」またはそのバイナリ「0001110101010 ..」をハッシュした場合、それが何であれ、「.」なしで

  • zlib.crc32 は符号付き整数を返します。改造 (%) は否定的ですか。正の H では、常に pos no を指定しますか?

  • H による %-ing はハッシュ関数の良さに影響しますか? (つまり、利用可能なxlib.crc32を使用して、利用可能なスペースに対してできる最善のことです)

ありがとう!

4

3 に答える 3

4

なぜ IP アドレスを数字にハッシュしたいのですか? それらはすでにネイティブの整数表現を持っています。たとえば、netaddrを使用すると、次のようになります。

>>> import netaddr
>>> ip = netaddr.IPAddress('192.168.1.1')
>>> ip.value
3232235777
>>> netaddr.IPAddress(3232235777)
IPAddress('192.168.1.1')
于 2011-07-20T02:37:13.880 に答える
1

違いはありますか?'128.0.0.5'またはそのバイナリ'0001110101010..'をハッシュすると、'。'の有無にかかわらず

あまり。

zlib.crc32は、符号付き整数を返します。モッディング(%)はネガティブですか。正のHを使用すると、常にpos noを与えますか?

はい。

Hによる%-ingは、ハッシュ関数の品質に影響しますか?(つまり、利用可能なxlib.crc32を使用して、利用可能なスペースに対してできる最善のことです)

「雪崩効果」の欠如を補うために、チェックサムのすべてのビットを使用する方がよいでしょう。192.168.1.1、などの1桁のバリエーション192.168.1.2は、チェックサムの最初のビットでのみ差異を生成する可能性があり%、最後のビットのみを考慮しているため、ハッシュは衝突します。

于 2011-07-20T02:43:04.997 に答える
1

広告 1) 異なる結果が得られますが、ハッシュの品質には影響しません。

広告 2) 常に正の数またはゼロを生成します。

広告 3) 可能なバケットの数を制限すると、ハッシュの品質に影響します。

一般的に: あなたの H はどのくらいの大きさですか? IPv4 アドレスは 32 ビット値にすぎないことに注意してください。192.168.0.1 は、人間が読みやすいバイト単位の表現です。したがって、H が 4294967295 より大きい場合、ハッシュは必要ありません。

于 2011-07-20T01:57:17.250 に答える