Andere haben zwar Recht, wenn sie darauf hinweisen, dass Sie mit ziemlicher Sicherheit in die Falle der verfrühten Optimierung tappen, aber wenn sie sagen, dass trigonometrische Funktionen O(1) sind, sagen sie nicht die ganze Wahrheit.
Die meisten Implementierungen trigonometrischer Funktionen sind tatsächlich O(N) für den Wert der Eingabefunktion. Das liegt daran, dass die trigonometrischen Funktionen am effizientesten auf einem kleinen Intervall wie [0, 2] berechnet werden (oder, bei den besten Implementierungen, auf noch kleineren Teilen dieses Intervalls, aber das reicht zur Erklärung aus). In Pseudo-Python sieht der Algorithmus also etwa so aus:
def Cosine_0to2Pi(x):
#a series approximation of some kind, or CORDIC, or perhaps a table
#this function requires 0 <= x < 2Pi
def MyCosine(x):
if x < 0:
x = -x
while x >= TwoPi:
x -= TwoPi
return Cosine_0to2Pi(x)
Selbst mikrokodierte CPU-Befehle wie die des x87 FSINCOS
am Ende so etwas intern machen. Da trig-Funktionen periodisch sind, benötigen sie in der Regel O(N) Zeit für die Argumentreduktion. Es gibt jedoch zwei Vorbehalte:
- Wenn Sie eine Vielzahl von Werten aus dem Hauptbereich der trigonometrischen Funktionen berechnen müssen, ist Ihre Mathematik wahrscheinlich nicht sehr gut durchdacht.
- Die Big-O-Schreibweise verbirgt einen konstanten Faktor. Die Argumentreduktion hat einen sehr kleinen konstanten Faktor, weil sie einfach zu bewerkstelligen ist. Daher wird der O(1)-Teil den O(N)-Teil für so gut wie jede Eingabe dominieren.
7 Stimmen
Vielleicht sollten Sie Ihren Link überprüfen - und aufhören, bei der Arbeit Spiele zu spielen! :-)
7 Stimmen
"Big O"?? Bitte bezeichnen Sie nicht alles, was mit Effizienz zu tun hat, mit dieser Bezeichnung. Die Berechnung wird O(1) sein. Aber das bedeutet gar nichts und schon gar nicht, dass sie schnell ist.
1 Stimmen
Ok, ich habe den Titel geändert. Tut mir leid, ich lerne das Zeug immer noch!