Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定平面上的n个点,如何找到等距共线三元组(如果存在)?_Algorithm - Fatal编程技术网

Algorithm 给定平面上的n个点,如何找到等距共线三元组(如果存在)?

Algorithm 给定平面上的n个点,如何找到等距共线三元组(如果存在)?,algorithm,Algorithm,很明显有蛮力的方法可以做到这一点,O(n^3)。有没有更有效的方法>P>一种方法是迭代所有的点对,并检查另一点是否正好存在于它们之间。根据点集的表示形式,这将导致比O(n^3)更好的运行时间。 使用X,Y值作为键,创建所有点(N)的哈希集 迭代每对点,计算中点并检查它是否存在于哈希集中(N^2) N+N^2

很明显有蛮力的方法可以做到这一点,O(n^3)。有没有更有效的方法

>P>一种方法是迭代所有的点对,并检查另一点是否正好存在于它们之间。根据点集的表示形式,这将导致比O(n^3)更好的运行时间。

  • 使用X,Y值作为键,创建所有点(N)的哈希集
  • 迭代每对点,计算中点并检查它是否存在于哈希集中(N^2)
N+N^2 下面是一个仓促创建的未经测试的javascript函数来演示

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