【问题标题】:How do I efficiently find the distance between all points in a set in C?如何有效地找到C中集合中所有点之间的距离?
【发布时间】:2014-10-16 11:05:44
【问题描述】:

我目前正在学习 C,最近编写了一个程序来使用 Prim 算法找到最小生成树。该程序运行良好,但需要每条边的成本(当然)。

如果我想找到大量 2D 坐标(例如 50)的 MST,我需要先找到点的欧几里得距离矩阵。我的问题是:这可以在不计算的情况下在 C 中完成吗

distance = sqrt((x2-x1)^2+(y2-y1)^2)

对于每一个点,例如使用循环?

我一直在尝试使用

arrayX[] = {x1,x2,x3,...xn}
arrayY[] = {y1,y2,y3,...yn}

并使用for 循环,但由于我的经验而无法这样做(当然,如果这是一维,这将非常容易!)。

任何人都可以给我任何关于做什么的指示吗?提前致谢!

【问题讨论】:

  • ^2 没有做你认为应该做的事情。

标签: c 2d minimum-spanning-tree euclidean-distance


【解决方案1】:

如果您只需要比较距离值而不需要实际值,那么您可以跳过昂贵的 sqrt() 调用。比较结果将与调用时保持一致。

【讨论】:

    【解决方案2】:

    最好对数据进行清晰的建模。例如,如果您正在使用具有整数坐标的 2D 点,请对其建模:

    typedef struct {
      int x, y;
    } point2d;
    

    现在你创建一个数组:

    point2d my_points[] = { { x1, y1 }, { x2, y2 }, ... };
    

    x1y1 等当然应该是实际整数值。

    你可以遍历这个:

    for(size_t i = 0; i < sizeof my_points / sizeof *my_points; ++i)
      printf("Point %zu is at (%d,%d)\n", i, my_points[i].x, my_points[i].y);
    

    等等。请注意,上面的 sn-p 假定为 C99。

    在计算距离时,请记住 C 中的 ^ 是按位异或,而不是求幂。对于后者,使用pow()powf() 函数。如前所述,如果您只是要比较相对距离,则计算 sqrt() 是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2011-12-15
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多