- PR -

javaでの非負整数の表現

投稿者投稿内容
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-12-02 23:05
1ビットシフトさせたりマスクしたりすると、ハッシュの重複が 2倍になるのでアドレスのオフセットをはじめから Integer.MAX_VALUE / 2 にしておくってのはどう? offset = Integer.MAX_VALUE / 2 としておけば、offset + hash が負数になることはないよ。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-12-05 10:21
結局、2^32(==4G)バイトのテーブルから 1バイトを探すインデクスを決める のにハッシュ値を利用するわけですよね ?
負数の時は 2^31(==2G)バイト分シークしておくとかして下駄を履かせてから(ハッシュ値+2^31)バイト目を見るとか、元テーブルを2GB+2GBに分けるとか、の工夫をすることもできると思いますよ。

「ハッシュ関数の出力を2^31までに制限する」とかは検討されました ?
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2005-12-06 10:56
負の数が出てくるとまずいというより
0からデータのバイト長-1の間にないと困るという話では?
ハッシュ値をx
長さをLとして
((x % L) + L) % L
の方が良さそうな気がします.

スキルアップ/キャリアアップ(JOB@IT)