- - PR -
javaでの非負整数の表現
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-02 23:05
1ビットシフトさせたりマスクしたりすると、ハッシュの重複が 2倍になるのでアドレスのオフセットをはじめから Integer.MAX_VALUE / 2 にしておくってのはどう? offset = Integer.MAX_VALUE / 2 としておけば、offset + hash が負数になることはないよ。
|
|
投稿日時: 2005-12-05 10:21
結局、2^32(==4G)バイトのテーブルから 1バイトを探すインデクスを決める のにハッシュ値を利用するわけですよね ?
負数の時は 2^31(==2G)バイト分シークしておくとかして下駄を履かせてから(ハッシュ値+2^31)バイト目を見るとか、元テーブルを2GB+2GBに分けるとか、の工夫をすることもできると思いますよ。 「ハッシュ関数の出力を2^31までに制限する」とかは検討されました ? |
|
投稿日時: 2005-12-06 10:56
負の数が出てくるとまずいというより
0からデータのバイト長-1の間にないと困るという話では? ハッシュ値をx 長さをLとして ((x % L) + L) % L の方が良さそうな気がします. |