Code in for-Schleifen vs If-else-Anweisungen

9

Ich habe versucht, dieses Problem zu lösen: Ссылка

Der folgende Code hat alle Tests in 44 ms bestanden.

%Vor%

Aber der folgende Code hat alle Tests in nur 20 ms bestanden.

%Vor%

Warum gibt es so einen signifikanten Unterschied? Der Maximalwert wird nur einmal in beiden Samples geändert, aber das Ändern in den if-else-Anweisungen ist weitaus effizienter als das Ändern am Ende der for-Schleife. Ist dies eine Ausnahme oder sollten wir diesem Standard bei der Codierung folgen?

    
Chaliswaan Choor 26.05.2016, 16:52
quelle

1 Antwort

1

Beim Vereinfachen (nicht früh optimieren, siehe max!) bekommt man

%Vor%

Beachte den doppelten Wert von i in der Originalversion. Wenn das erste Math.max durch ein if ersetzt wird, könnte der Code schneller sein.

Es ist schwer, eine Erklärung abzugeben w.r.t. Um hier für die beiden ursprünglichen Versionen zu beschleunigen, erkannte der Hotspot-Compiler möglicherweise die Redundanz. Oder was auch immer.

Es wäre schön, eine Java-8-Version mit mp.putIfAbsent oder so zu sehen, aber das könnte es langsamer machen.

    
Joop Eggen 26.05.2016 17:23
quelle

Tags und Links