Algorithm 在一组线段中查找所有交点?
我有一个对象数组(线)和一个返回真/假的二进制操作(交集)。 蛮力是在嵌套的for循环上复制数组Algorithm 在一组线段中查找所有交点?,algorithm,geometry,big-o,Algorithm,Geometry,Big O,我有一个对象数组(线)和一个返回真/假的二进制操作(交集)。 蛮力是在嵌套的for循环上复制数组 for (Line line : linesArray) { for (int j = 0; j < linesArray.length; j++) { if (line.isIntersecting(linesArray[j])) { Point intersection = line.inter
for (Line line : linesArray) {
for (int j = 0; j < linesArray.length; j++) {
if (line.isIntersecting(linesArray[j])) {
Point intersection = line.intersectionWith(linesArray[j]);
d.drawCircle(intersection.getXInt(), intersection.getYInt(), 3);
d.fillCircle(intersection.getXInt(), intersection.getYInt(), 3);
}
}
}
for(行:linesArray){
对于(int j=0;j
但是,顺序并不重要,所以我考虑生成一个大小为2的子集,并检查每个子集,但从复杂的角度来看,它似乎并没有更好的效果
是否有一个有效的(运行时间)来执行此操作 枚举大小为2的所有子集并检查每个子集并不是对现有算法的改进,这是正确的。事实上,这本质上只是对你的算法的一种重述 有更快的算法来解决在线段集合中查找所有交点的问题。其中最著名的是,它的工作原理是根据线段的x坐标对线段进行排序,并从左到右在点上扫掠一条直线。它在时间O((n+k)log n)中工作,其中n是线段数,k是交点数 还有一些更现代的算法可以更快地解决这个问题,但这可能是一个很好的起点
希望这有帮助 枚举大小为2的所有子集并检查每个子集并不是对现有算法的改进,这是正确的。事实上,这本质上只是对你的算法的一种重述 有更快的算法来解决在线段集合中查找所有交点的问题。其中最著名的是,它的工作原理是根据线段的x坐标对线段进行排序,并从左到右在点上扫掠一条直线。它在时间O((n+k)log n)中工作,其中n是线段数,k是交点数 还有一些更现代的算法可以更快地解决这个问题,但这可能是一个很好的起点
希望这有帮助 你的输入和输出是什么?你的输入和输出是什么?