代码之家  ›  专栏  ›  技术社区  ›  Pasha

hash()%n和n%hash()有什么区别

  •  1
  • Pasha  · 技术社区  · 8 年前

    在一个单元里找到一个合适的单元数,我可以找到一个很好的单元数: item.hash()%(n-1) = # of the bucket.

    但是为什么要提到这个特定的表达呢?

    反过来呢 (n-1)%item.hash() = # of the bucket

    (n - 1) & hash

    3 回复  |  直到 8 年前
        1
  •  2
  •   Little Santi    8 年前

    % 作为一种 一致的一组数字通过 它们在较小的范围内。这组数字就是输入键的哈希码。小范围是桌子的容量。

    当您想要在一个小表中分配一个索引来存储一个大的数字时,这是一个非常有用的技术。

    n % hash 总会回来的 n ,所以根本没有兴趣。

    Java通过 hash & (length-1) hash % length ,但这是一个替代的-比模数-公式更便宜的减少和分配(学分@Zabuza)。

        2
  •  2
  •   Stephen C    8 年前

    逆1(n-1)%如何项目.哈希桶的()与它不同?

    基本上不管用。

    但“逆”函数不能做到这一点。因此,如果您尝试使用它,(所谓的)bucket下标将为Java范围内的大多数h值提供异常,因为h%(n-1)>(n-1)或<0 int

    因为@Zubuza注意到余数(%)和除法(/)不是可交换的。

        3
  •  1
  •   Julius Häger    8 年前

    两者之间的区别 hash % n n % hash 是这样吗 哈希%n 将比 n%哈希 .

    n%哈希 几乎总是相当于 n ,因为 a % b b > a 等于 a (例如。 15 % 30 = 15 ).

    I created a graph to show the differences (红色是 x % n 蓝色是 n % x x 表示哈希)。 Graph

    expensive ' % (mod)操作,而不是做相对便宜的 & n