2016-12-09 3 views
0

Angenommen, es ist eine Matrix A, die n Elemente und eine Codezeile, die eine if-Anweisung mit mehreren Bedingungen enthält, zum Beispiel:Laufzeit einer if-Anweisung mit mehreren Bedingungen

for i = 2 to n 
    if A[i] > m and A[i] - A[1] = EVEN 
     then set m to A[i] 

ist die Laufzeit für die zweite Zeile n-1, oder ist es 2 * (n-1), da es zwei Bedingungen für die if-Anweisung gibt?

Antwort

2

Wenn Sie über die Laufzeit sprechen, benötigen Sie im Allgemeinen ein "Kostenmodell", um darüber zu sprechen, wie viel jede Operation "kostet". Es ist eigentlich ziemlich ungewöhnlich, ein Kostenmodell zu sehen, das in die Detailebene eingeht, auf die Sie hier eingehen - normalerweise würden Sie einfach die Details abstrahieren und sagen, dass die Kosten für die Durchführung all dieser Tests O (1) sind. (eine Konstante, die nicht von der Größe der Eingabe abhängig ist), anstatt genau auf eine Ebene zu zählen.

Wenn Sie mit einem bestimmten Level zählen wollen, möchten Sie vielleicht auch die Kosten der Array-Lookups berücksichtigen, ob die Dinge kurzgeschlossen sind, die Auswirkung der Verzweigungsvorhersage oder Fehlvorhersage auf die Laufzeit, usw. ... und das erklärt teilweise, warum es so selten ist, dass Menschen tatsächlich über Dinge auf dieser Detailebene sprechen.

+0

Ich stimme zu: normalerweise würden wir nur sagen, dass die Bedingung O (1) pro Iteration ist. Zusätzlich zu dem, was Sie hervorheben, hängt in diesem speziellen Fall die Häufigkeit, mit der die zweite Bedingung (dh A [i] - A [1] = GERADE) überprüft wird, vom Ergebnis der ersten Bedingung ab und davon, ob die Sprache dies zulässt Kurzschluss-Bewertung. –