- 主题:问个算法问题
平面上有n条垂直的,m条水平的线,找到他们组成的长方形rectangle,且这些长方形两两
不相互包含
我的做法是
1、遍历nxm,找到线的所有交点集合,得到一个hash表<point, Tuple<vLine,hLine>> P
2、P.keySet 按照Y,X排序,
3、从P.keySet x P.keySet遍历,每两个不在同一条直线上的点p1,p2,得到一个矩形r,
然后看这个矩形四个顶点是否在hash表P里,且他们对应的vLine,hLine是否相交,这样得
到一个hash表<point, Rectangle>, 每生成一个新的矩形,要看他是否和前面的矩形是
否相互包含。
这里面有两次遍历都比较耗时,1,求所有交点;3、生成一个矩形,还要和前面的矩形判
断是否包含。
看看有什么优化的地方。
--
FROM 120.229.14.*
xy排好了直接打印最近邻的(m-1)(n-1)个?
【 在 iwannabe 的大作中提到: 】
: 平面上有n条垂直的,m条水平的线,找到他们组成的长方形rectangle,且这些长方形两两
: 不相互包含
:
: 我的做法是
: 1、遍历nxm,找到线的所有交点集合,得到一个hash表<point, Tuple<vLine,hLine>> P
: 2、P.keySet 按照Y
: ..................
发自「今日水木 on 22041216C」
--
FROM 101.82.207.*
垂直水平,4次大小比较就能确定了,没有什么计算量
【 在 iwannabe 的大作中提到: 】
: 平面上有n条垂直的,m条水平的线,找到他们组成的长方形rectangle,且这些长方形两两
: 不相互包含
: 我的做法是
: ...................
--
FROM 121.33.161.*
架不住点多,k级别的就很慢
【 在 iMx (围城) 的大作中提到: 】
: 垂直水平,4次大小比较就能确定了,没有什么计算量
:
:
: 【 在 iwannabe 的大作中提到: 】
--
FROM 120.229.14.*
跟算重复点差不多,M级别才会慢
可以用四叉树加速
【 在 iwannabe 的大作中提到: 】
: 架不住点多,k级别的就很慢
--
FROM 121.33.161.*
kxk可不就是m了吗
【 在 iMx (围城) 的大作中提到: 】
: 跟算重复点差不多,M级别才会慢
: 可以用四叉树加速
:
:
--
FROM 183.9.232.*
没看懂题, 不相互包含是啥意思?
比如两横两纵, 输出一共4个长方形吗?
【 在 iwannabe 的大作中提到: 】
: 平面上有n条垂直的,m条水平的线,找到他们组成的长方形rectangle,且这些长方形两两
: 不相互包含
: 我的做法是
: ...................
--
FROM 86.130.201.*
两横两纵最多就一个长方形啊
相互包含定义是
public static boolean isParent(PDFTextBoxRect parentRect, PDFTextBoxRect
childRect) {
if (Float.compare(parentRect.getStartX(), childRect.getStartX()) <= 0
&& Float.compare(parentRect.getEndX(), childRect.getEndX())
>= 0
&& Float.compare(parentRect.getStartY(), childRect.getStartY()
) <= 0
&& Float.compare(parentRect.getEndY(), childRect.getEndY())
>= 0) {
return true;
} else {
return false;
}
}
【 在 SHENOK 的大作中提到: 】
: 没看懂题, 不相互包含是啥意思?
: 比如两横两纵, 输出一共4个长方形吗?
--
FROM 120.229.14.*