2017-06-05 3 views
-3

Ich habe n Punkte in einer 2D-Ebene. Ich möchte den Abstand zwischen zwei Punkten in C++ berechnen. Position des m-ten Punktes im Plan ist (x (m), y (m)). Dieser Punkt ändert sich im Laufe der Zeit. Die Anzahl der Zeitschritte ist gleich 10^5. Ich schrieb unter Code, aber als n ist eine große Zahl (5000) und ich möchte den Abstand zwischen den Punkten 10^5-mal finden, bin ich auf der Suche nach der optimierten Möglichkeit, das zu tun. Könnte mir jemand sagen, was der zeitaufwendigste Weg ist, das zu tun?Die am besten optimierte Methode zur Berechnung der Entfernung zwischen Daten in 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 

Ich weiß, dass, in Matlab, ich dies durch die Verwendung bsxfun Funktion finden. Ich möchte auch wissen, welche man Entfernungen schneller berechnen könnte? Matlab oder C++?

+0

Auch wenn Sie das vermeiden können, 'wenn 'Komplexität wird immer noch 'O (n²)' sein. – Jarod42

+0

Sie möchten Abstände zwischen allen möglichen Paaren von Punkten berechnen. Es wird sowieso O (N^2) sein. Sie können versuchen, es parallel zu machen, um Dinge schneller zu machen. – CaptainTrunky

+0

Ja, es ist kein guter Weg und ich suche den besten Weg. Kannst du mir bitte helfen? @ Jarod42 –

Antwort

0

In Bezug auf Matlab, haben Sie auch pdist, die genau das tut (aber nicht so schnell), und Sie sollten auch read this.


Über Matlab und C vergleichen zuerst lesen this und this. Denken Sie auch daran, dass Matlab als Desktop-Programm nicht nur eine allgemein effiziente Möglichkeit zur Implementierung Ihres Codes, sondern auch die richtige Vorgehensweise in Matlab benötigt. Ein Beispiel ist der Unterschied zwischen Funktionen. Eingebaute Funktionen werden in FORTRAN oder C geschrieben und laufen viel schneller als nicht eingebaute Funktionen. Um zu wissen, ob eine Funktion eingebaut ist, Typ:

which function_name 

und prüfen Sie, ob Sie sehen „built-in“ zu Beginn des Ausgangs:

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