Algorithm 给定平面上的n个点,如何找到等距共线三元组(如果存在)?
很明显有蛮力的方法可以做到这一点,O(n^3)。有没有更有效的方法>P>一种方法是迭代所有的点对,并检查另一点是否正好存在于它们之间。根据点集的表示形式,这将导致比O(n^3)更好的运行时间。Algorithm 给定平面上的n个点,如何找到等距共线三元组(如果存在)?,algorithm,Algorithm,很明显有蛮力的方法可以做到这一点,O(n^3)。有没有更有效的方法>P>一种方法是迭代所有的点对,并检查另一点是否正好存在于它们之间。根据点集的表示形式,这将导致比O(n^3)更好的运行时间。 使用X,Y值作为键,创建所有点(N)的哈希集 迭代每对点,计算中点并检查它是否存在于哈希集中(N^2) N+N^2
- 使用X,Y值作为键,创建所有点(N)的哈希集
- 迭代每对点,计算中点并检查它是否存在于哈希集中(N^2)
function getESCT(points) {
var hashset = {};
points.forEach(function(pt) { hashset[pt.x + "," + pt.y] = pt; });
for(var i=0; i<points.length; i++) {
var pt1 = points[i];
for(var j=0; j<points.length; j++) {
var pt2 = points[j];
var key = ((pt1.x + pt2.x) / 2) + "," + ((pt1.y + pt2.y) / 2);
if(hashset[key]) {
return hashset[key];
}
}
}
return null;
}
函数getESCT(点){
var hashset={};
forEach(函数(pt){hashset[pt.x+,“+pt.y]=pt;});
对于(var i=0;i很可能是的。或者,可能不是。你应该解释更多关于这个问题的内容,并给出一个小例子。可能想尝试将其交叉发布到或StackExchange。点集的最有效表示形式是什么?如果坐标是整数,可以使用哈希表,否则可以使用四叉树E