2017-09-09 4 views
0

Eine ungefähre Antwort ist ausreichend. Ich werde überprüfen, ob 2 Rechtecke der gleichen Größe sich überlappen oder nicht 1) Vorhandener Code prüft, ob alle (x, y) eines Rechtecks ​​mit dem All (x, y) eines anderen übereinstimmt. Also insgesamt 16 Vergleiche machen 2) Meine Verbesserung - Berechne den Abstand zwischen den oberen linken Ecken jedes Rechtecks ​​und überprüfe, ob dieser Abstand kleiner ist als die Diagonale des Rechtecks.Welcher braucht weniger CPU-Taktzyklen zur Ausführung? Pythagoras-Formel oder 16 Vergleiche zwischen Ints in "If" -Klausel?

Auch jedes Buch/Material, das über die Anzahl der CPU-Taktzyklen/Zeit diskutiert, die jede Operation in der Codierung benötigt, um einmal auf der CPU ausgeführt zu werden, wird geschätzt.

Antwort

0

Dies hängt hauptsächlich von Ihrer Annäherung der Quadratwurzel ab. Eine reguläre Approximation wird definitiv langsamer sein, einfach wegen der Genauigkeit (und daher der Iterationen), die es bereitstellt.

Vorausgesetzt, dass Ihre Rechtecke ziemlich klein erscheinen, wäre der schnellste Algorithmus eine einfache Suche: Speichern Sie alle möglichen Quadratwurzeln in einem Wörterbuch und suchen Sie nach.

Wenn das nicht ist, was Sie brauchen, können Sie nach einem anderen Algorithmus suchen (suchen Sie nach Approximationen von Quadratwurzeln oder nach eingebauten Algorithmen, um Quadratwurzeln zu erhalten). Dann liegt es an Ihnen, die notwendigen Iterationen und damit die Komplexität zu berechnen.

Hier ist ein Link auf eine ähnliche Frage, mit einigen empirischen Annäherungen:

https://gamedev.stackexchange.com/questions/27196/which-opcodes-are-faster-at-the-cpu-level

Verwandte Themen