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 回答