【发布时间】:2017-06-16 08:51:34
【问题描述】:
我正在解决Cracking The Coding Interview 中的一个问题,该问题要求:给定一个带有点的二维图,找到一条通过最多点数的线。
解决方案是:在每两点之间画一条无限线,并使用哈希表跟踪哪条线最常见。为了找到最常见的线,我们使用哈希表遍历所有线段来计算我们看到每条线的次数。
作者接着说有一个复杂之处:“如果两条线具有相同的斜率和 y 截距,我们将定义两条线相等。然后,我们将根据这些值对线进行散列(特别是基于斜率)。浮点数的问题不能总是用二进制准确表示。我们通过检查两个浮点数是否在彼此的 epsilon 值内来解决这个问题。"
这就是我感到困惑的地方。即使斜率是一个浮点数,我们不能用它作为哈希键吗?如果是这样,为什么不将斜率散列为字符串呢?为什么我们需要在我们的代码中引入基于彼此 epsilon 内的键的散列?
【问题讨论】:
-
因为计算机中的浮点数(通常)是一个近似值,因此根据您用来得出数字的方法,在数学上应该相同的数字之间可能存在微小差异。看看docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
标签: algorithm hash binary floating-point key