• 点集最大共线问题


    点集最大共线问题

     问题: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判断。

  • 相关阅读:
    7A
    map最最最基本用法
    cccc超级酱油心得
    scu-4445
    初学算法之广搜
    初学算法之最基础的stl队列
    初学算法之筛选素数法
    go 虎牙爬取
    php使用xpath爬取内容
    go xpath
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3238224.html
Copyright © 2020-2023  润新知