2017-06-05 118 views
-3

我在2D平面中有n个点。我想计算C++中每两个点之间的距离。计划中第m个点的位置是(x(m),y(m))。这在经过时间点上发生了变化。时间步数等于10^5。 我写下面的代码,但因为n是一个很大的数字(5000),我想要找到点之间的距离10^5次,我正在寻找最优化的方式来做到这一点。有谁能告诉我什么是最不耗时的方法吗?在C++中计算数据之间距离的最优化方法

for(i=1;n;++) 
    for(j=1;n;++) 
     if (i>j) 
     r(i,j)= r(j,i); 
     else 
     r(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2); 
     end 
    end 
end 

我知道,在Matlab中,我可以通过使用bsxfun函数找到这个函数。我还想知道哪一个可以更快地计算距离? Matlab还是C++?

+0

即使你能避免'如果'复杂性仍然是'O(n²)'。 – Jarod42

+0

你想计算所有可能的点对之间的距离。无论如何,它将是O(N^2)。您可以尝试将其并行化以加快速度。 – CaptainTrunky

+0

是的,这不是一个好方法,我正在寻找最佳方法。请问你能帮帮我吗? @ Jarod42 –

回答

0

关于Matlab,你也有pdist这确实(但不是很快),你也应该read this


关于比较Matlab和C首先阅读thisthis。另外请记住,作为一个桌面程序,Matlab不仅需要知道实现代码的一般高效方式,还需要了解在Matlab中执行此操作的正确方法。一个例子是函数之间的区别。内置函数使用FORTRAN或C编写,运行速度比非内置函数快得多。要知道,如果一个功能是内置的类型:

which function_name 

,如果你看到“内置”的输出开始检查:

built-in (C:\Program Files\MATLAB\...)