Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/139.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
C# 从列表中获取3个最常见点<;点>;_C# - Fatal编程技术网

C# 从列表中获取3个最常见点<;点>;

C# 从列表中获取3个最常见点<;点>;,c#,C#,我有一个快速的问题,我还没有发现如何有效地(用C#)完成 我有一个点(X,Y)的列表数组。我需要找出哪3个点是最紧密的簇。这是一个地图项目 最好的方法是什么?列表中只有大约6到9项 提前谢谢 干杯 您可以将问题简化如下: 不要把一个点和它自己对照;距离是零 利用对称性:从点i到点j的距离与点j到点i的距离相同 这些消除了许多组合 但是,考虑到这些,您必须计算每对之间的距离并进行排序。如果点不相同,这将成为一种排序形式 有各种算法在测量和“聚集”点的方式上有所不同,尽管只有少数点,暴力方法可能是最

我有一个快速的问题,我还没有发现如何有效地(用C#)完成

我有一个点(X,Y)的列表数组。我需要找出哪3个点是最紧密的簇。这是一个地图项目

最好的方法是什么?列表中只有大约6到9项

提前谢谢


干杯

您可以将问题简化如下:

  • 不要把一个点和它自己对照;距离是零
  • 利用对称性:从点i到点j的距离与点j到点i的距离相同
  • 这些消除了许多组合


    但是,考虑到这些,您必须计算每对之间的距离并进行排序。

    如果点不相同,这将成为一种排序形式


    有各种算法在测量和“聚集”点的方式上有所不同,尽管只有少数点,暴力方法可能是最简单的。。。你可以测量每对点之间的距离,然后排序…

    对于这样小的数字,蛮力法应该可以很好地工作。对于六个点,有20种可能的三个点的组合。有9个点,有84种可能的组合。我不推荐这种方法有很多优点,但只要有一点点,它就足够快了,而且编写起来非常简单

    您可以轻松生成以下组合:

    for (int i = 0; i < points.Length - 2; ++i)
    {
        for (j = i + 1; j < points.Length - 1; j++)
        {
            for (k = j + 1; k < points.Length; k++)
            {
                // Here, your three points are
                // points[i], points[j], and points[k]
                // compute "tightness" and store
            }
        }
    }
    
    struct PointGroup
    {
        public readonly int i;
        public readonly int j;
        public readonly int k;
        public readonly double tightness;
        public PointGroup(int i, int j, int k, double tight)
        {
            this.i = i;
            this.j = j;
            this.k = k;
            this.tightness = tight;
        }
    }
    
    如果您为每个组创建其中一个结构并将它们存储在一个数组中,您只需对数组进行排序,然后取最好的三个

    你更大的问题是“紧密小组”的定义。此外,你必须决定一个点是否可以位于多个“最紧密”小组中。定义气密性的三种可能方法是:

    • 点之间的距离之和最小化
    • 从每个点到组中心的平均距离最小化
    • 三个点形成的三角形的周长最小化

    毫无疑问还有更多。

    谢谢!我决定用蛮力技术。干杯,谢谢你的建议。@PetarMinchev Tight cluster——我的意思是3点之间最接近。