Tekkaman

导航

 

点集最大共线问题

 问题:2D空间里有N个点,设计一个算法,求出此空间内最多有多少个点共线。

 解法一:依次取2个点,确定一条直线,然后依次检测剩下的点是否在当前线段(叉积为零则在一直线上)。O(n^3)。

 解法二:依次取1个点,统计出此点所有直线的等值斜率的个数。如果用Hash统计,则花费O(n^2)。

扩展

 原题地址:http://star.baidu.com/forum/forum.php?mod=viewthread&tid=1652

 问题抽象:2D空间里有N个点,设计一个算法,求出此空间内最多有多少个点在同一抛物线(y=ax^2+bx)。 

 解题思路
  令z=y/x,则z=y/x=(ax^2+bx)/x=ax+b,
  以此进行左边变换:(x,y) -> (x,z)=(x,y/x),知道:
  若(x1,y1)、(x2,y2)、(x3,y3)位于同一条经过原点的抛物线上,则(x1,z1) (x2,z2) (x3,z3)三点共线

  于是:问题转换成了找点集(xi,zi)内最多多少个共线。经典问题,枚举俩然后hash判断。

posted on 2013-08-05 14:58  Tekkaman  阅读(494)  评论(0编辑  收藏  举报