2017-06-05 18 views
-3

私は2D平面にn点を持っています。私は、C++でそれぞれの2点間の距離を計算したいと思います。計画の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でこれを行う正しい方法を知る必要があることにも留意してください。 1つの例は、機能の違いです。組み込み関数はFORTRANまたはCで書かれており、はるかに速く、組み込みのない関数でも実行されます。機能が内蔵されている場合タイプ、知っている:

which function_name 

、あなたは、出力の開始時に、「ビルトイン」を参照してくださいかどうかを確認:あなたは `場合は回避できたとしても

built-in (C:\Program Files\MATLAB\...) 
関連する問題