计算包含P中最大点数的行

时间:2017-02-18 21:38:44

标签: algorithm

以下是编程访谈要素中的问题:

  

设P是平面中的n个点的集合。每个点都有整数坐标。设计一种有效的算法来计算包含P中最大点数的行。

以下是解决方案的引用:

  

一个想法是从斜率计算哈希码,并将此线的y轴截距计算为有序的双精度对。由于有限精度算术,我们可能有三个点共线映射到不同的桶。如果生成的均匀[0,1]随机数位于[0.3,0.6],则返回数字6。

     

更强大的哈希函数将斜率和y轴截距视为有理数。理性是一对有序的整数:分子和分母。在应用哈希函数之前,我们需要将理性引入规范形式。一种规范形式是使分母始终为非负,并且相对于分子的素数。平行于y轴的线是特殊情况。对于这样的线,我们使用x轴截距代替y轴截距,并使用1/0作为斜率。

我不明白的部分是:

  

我们需要在应用哈希函数之前将理性引入规范形式。

为什么我们需要在应用哈希函数之前将理性引入规范形式?

1 个答案:

答案 0 :(得分:1)

他们(IMO)过于精确。它们并不将有理数作为不同的数字处理,而是作为有序的整数对。在这个公式中,(1,2)和(3,6)将是不同的有理数。他们所讨论的规范形式将是你隐含的假设,即(1,2)和(3,6)是相同的有理数,即(当写为小数时)0.5。

使分母为非负值允许您将(-1,2)和(1,-2)视为相同的数字,并使分母相对于分子的素数只是取消减少的公因数(3,6) )至(1,2)

相关问题