【发布时间】:2011-12-18 20:33:51
【问题描述】:
我正在使用 C#,并且我有两个 list<AACoordinate>,其中这些列表中的每个元素代表 x、y 和 z 空间中的一个 3D 点。
class AACoordinate
{
public int ResiNumber { get; set; }
public double x { get; set; }
public double y { get; set; }
public double z { get; set; }
}
每个列表可以包含 2000 或更多点,我的目标是将 list1 的每个点与 list2 的所有点进行比较,如果距离小于特定数字,我会记录下来.目前我正在使用 foreach 将 list1 的每个元素与 list2 的所有元素进行比较。由于点的数量,这非常慢。你有什么建议可以加快速度吗?
我的循环是:
foreach (var resiSet in Program.atomList1)
{
foreach (var res in Program.atomList2)
{
var dis = EuclideanDistance(resiSet, res);
if (dis < 5)
temp1.Add(resiSet.ResiNumber);
}
}
提前感谢您的帮助。
【问题讨论】:
-
你能分享foreach循环体吗?
-
@sll:这很慢,因为将每个点与其他点进行比较是一个
n^2操作。这就像进行选择排序。 -
您正在描述一个 n*n 解决方案。您能否更清楚地了解“保留它”的标准?
-
您的问题类似于最近的点对问题en.wikipedia.org/wiki/Closest_pair_of_points_problem。 SO上有几个关于它的讨论。
-
顺便说一句,所提出的算法假设一个“单一空间”。他可能需要合并两个列表并对整个点集进行操作(每个点都有一个源列表指示符),抛出相同列表距离的结果。
标签: c# algorithm list coordinates