2017-07-20 17 views
-2

値0-9から0,10-19から1,20-29から2,30-39から3、-1から-9から-1をマップするハッシュ関数が必要です。 -2〜-19〜10、など正の数についてハッシュ関数の計算

int hash (int value) { 
    return (int)(value/10); 
} 

作品が、-9 0にマップされ、負の数0は間違っています。これを改善するために私は何ができますか?

+2

「**」は、**「1」と「-1」の両方にどのようにマップできますか? – QBrute

+0

固定。負の数は負のハッシュを与えるはずですが、私は10進値も含めて(-0.00000001)、本当にこの関数は整数をとりますので、問題にならないようにしてください –

+0

なぜこれにJavaタグがありますか? –

答えて

7

これは難しいことではありません。

int val = value/10; 
if(value < 0) 
    val--; 
return val; 
+0

'return(value - (value <0?1:0))/ 10;'が良いかもしれませんが、何かがこの醜いハッシング関数をより良くすることができるとは思えません。 – Slava

+1

可能な限り読みにくいコードを書くつもりならば、 "より良い"でしょう。 – Kayaman

+0

私は、条件付きではなく数学的な方法があるかどうか疑問に思っていましたが、私は推測しません。 –