Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定一个有点的二维图,找出一条通过最大点数的线_Algorithm_Computational Geometry_Least Squares - Fatal编程技术网

Algorithm 给定一个有点的二维图,找出一条通过最大点数的线

Algorithm 给定一个有点的二维图,找出一条通过最大点数的线,algorithm,computational-geometry,least-squares,Algorithm,Computational Geometry,Least Squares,这个问题来自破解第7章问题6的编码面试。作为一名数学家,我认为这似乎是一个简单的最小二乘问题,在这里我们可以找到最佳拟合线。尽管如此,在解决方案中,他们采取了不同的方法 我的问题是:开发最小二乘法是一个足够的解决方案,还是我不理解手头的问题?最小二乘法不是一个合适的解决方案,它不关心对齐点的数量。最小二乘拟合可能根本不包含点 julian的链接中的解决方案具有O(N²)行为,假设哈希映射具有O(N)行为来计数重复项。(通过排序,可以保证O(N²logn) 主要思想是依次取每一点,计算所有其他点的

这个问题来自破解第7章问题6的编码面试。作为一名数学家,我认为这似乎是一个简单的最小二乘问题,在这里我们可以找到最佳拟合线。尽管如此,在解决方案中,他们采取了不同的方法


我的问题是:开发最小二乘法是一个足够的解决方案,还是我不理解手头的问题?

最小二乘法不是一个合适的解决方案,它不关心对齐点的数量。最小二乘拟合可能根本不包含点

julian的链接中的解决方案具有O(N²)行为,假设哈希映射具有O(N)行为来计数重复项。(通过排序,可以保证O(N²logn)


主要思想是依次取每一点,计算所有其他点的方向,并计算一致的方向。

< P>可以考虑使用双平面。 对于坐标为p_x,p_y的任意点p,可以将其转换为其双线p*=(y=p_xx-p_y)。
对于任意一行l:y=mx+b,可以将其转换为其对偶点l=(m,-b)

然后,平面中的共线点在双平面中形成相交线。然后,可以使用直线相交算法来查找具有最大直线数的交点。将双平面中的该交点转换回原始平面中的一条直线,将使该直线与最大数量的点相交


更多细节,请参见M.de Berg等人的《计算几何》第8.2章。

Hough变换主要是您想要的。您可能会使用概率版本来加速,但会牺牲一些准确性。OpenCv库已经实现了它,但重新实现它并不困难。

如果您确信最小二乘法解决了问题,并且可以对其进行编码,那么这是一个有效的解决方案。这是最好的解决方案吗?只有在编码比@juvian更简单/更高效的情况下,我的意思是最小二乘法在几乎任何想要使用回归的行业中都是如此。我只是对作者为什么采取完全不同的方法感到困惑。对我来说似乎不实用。最小二乘法解决了另一个问题,结果线可能根本不会通过点。@MBo我明白了,所以它不是一个可行的解决方案?是的,它不适合于仪器