【问题标题】:Hash Function Calculation哈希函数计算
【发布时间】:2017-12-26 12:25:51
【问题描述】:

我需要一个哈希函数,将值 0-9 映射到 0、10-19 映射到 1、20-29 映射到 2、30-39 映射到 3、-1 映射到 -9 映射到 -1、-10 映射到 - 19 到 -2 等

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

适用于正数,但 0 到 -9 映射到 0,负数是错误的。我该怎么做才能解决这个问题?

【问题讨论】:

  • 如何将0 映射到 1 和-1?
  • 已修复。负数应该给出一个负散列,我也只包括十进制值(-0.00000001),但实际上这个函数需要一个整数,所以这无关紧要
  • 为什么会有Java标签?
  • 边界现在是倾斜的。它们应该是-1 to -10、-11 to -20 等等。

标签: java c++ algorithm hash


【解决方案1】:

嗯,这并不难,不是吗。

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

【讨论】:

  • return ( value - ( value &lt; 0 ? 1 : 0 ) ) / 10; 可能会更好,但我怀疑任何东西都可以让这个丑陋的散列函数变得更好。
  • 只有当您打算编写尽可能难以阅读的代码时,它才会“更好”。
  • 我只是想知道是否有一种数学方法而不是使用条件,但我想没有。
  • 这也行不通。将输入 -4 作为值,-4 / 10 会在应该给你 -1 时给你 0。
  • @HansLanda 是的,-4 / 10 会给你0,因为-4 是负数,你将返回值减一。这是基础数学,加油。
猜你喜欢
  • 2016-06-23
  • 2017-10-28
  • 2017-02-04
  • 2012-04-14
  • 2014-01-14
  • 1970-01-01
  • 2019-12-14
  • 2011-12-08
  • 1970-01-01
相关资源
最近更新 更多