2

私は次のC式を持っています

bucket = (hash - _min) * ((_capacity-1) / range());

バケットの代わりに _capacity を返すように方程式を再配置するために必要なもの (_capacity 以外のすべての変数があります)。例えば

96 = (926234929-805306368) * (( x -1) /1249540730)
836 = (1852139639-805306368) * ((x -1) /1249540730)

ご覧のとおり、これはかなり単純な方程式で、必要なのは左側の x だけです。しかし、私の代数は非常にさびているので、助けていただければ幸いです。

4

2 に答える 2

7
capacity = (range() * bucket) / (hash - _min) + 1;

bucket = (hash - _min) * ((_capacity - 1) / range()); // start
bucket = ((hash - _min) * (_capacity - 1)) / range(); // rearrange
range() * bucket = (hash - _min) * (_capacity - 1); // multiply by range
(range() * bucket) / (hash - _min) = _capacity - 1; // divide by (hash - _min)
(range() * bucket) / (hash - _min) + 1 = _capacity; // add 1
capacity = (range() * bucket) / (hash - _min) + 1; // rearrange
于 2010-02-18T23:03:10.747 に答える
1
_capacity = 1 + bucket / (hash - _min) * range();

hashもはや等しくすることができない規定で_min

于 2010-02-18T23:04:06.237 に答える