【发布时间】:2015-12-05 19:39:20
【问题描述】:
给了我 N 行,也就是说,给了我 N 行的 a,b,c。每条线的形式为 ax + by + c = 0。我需要找出相互平行的线的最大数量。
为此,首先我创建比率 A/B (-slope) 和 C/B (-intercept) 的二维数组,除了 b == 0(我将斜率设为 1/eps ,我已将 eps 定义为一个非常小的正数)。
然后我删除 $O(n^2)$ 复杂度中的重复条目。
我再次进行 $O(N^2)$ 扫描以查找给定斜率存在多少条线并报告最大数量。
事实证明,这是一种较慢的方法。我怎样才能让它更快?
另外,我正在用 C++ 编写代码。
【问题讨论】:
-
两个部分都不是 O(n^2),而是先使用 O(nlogn) 算法对其进行排序,然后使用线性搜索。
-
而且,由于浮点数的怪癖,准确的结果不要使用浮点数/双精度数。垂直线的特殊情况,以及其余部分的比率(即 a/b 作为两个数字)...... lcm 等。