Der effizienteste Weg, um das kleinste von 3 Zahlen Java zu finden?
Ich habe einen Algorithmus in Java geschrieben, ich möchte effizienter zu machen. Ein Teil, dass ich denke, könnte effizienter gestaltet werden, ist das finden der kleinste von 3 zahlen. Derzeit bin ich mit der Math.min
Methode wie folgt:
double smallest = Math.min(a, Math.min(b, c));
Wie effizient ist diese? Wäre es effizienter, Sie zu ersetzen mit if-Anweisungen wie unten:
double smallest;
if (a < b && a < c) {
smallest = a;
} else if (b < c && b < a) {
smallest = b;
} else {
smallest = c;
}
Sind, oder wenn eine andere Weise, die effizienter ist
Frage ich mich, ob es Wert ist zu verändern, was ich bin derzeit mit?
Jede Geschwindigkeit zu erhöhen, wäre sehr hilfreich
InformationsquelleAutor der Frage Chris | 2012-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist ernst nicht Wert ändern. Die Art von Verbesserungen, die Sie bekommen werden, wenn Sie das hantieren mit Mikro-Optimierungen wie diese werden es sich nicht lohnen. Auch die Methode aufrufen, die Kosten werden gelöscht, wenn die
min
Funktion wird aufgerufen genug.Wenn Sie ein problem mit Ihrem Algorithmus, Ihre beste Wette ist zu schauen, in makro-Optimierungen ("big picture" Sachen wie algorithmen oder tuning) - Sie bekommen im Allgemeinen viel bessere performance-Verbesserungen gibt.
Und Ihren Kommentar, dass das entfernen
Math.pow
gab Verbesserungen kann gut sein, richtig, aber das ist, weil es eine relativ teure operation ist.Math.min
wird das auch nicht nahe, dass in Bezug auf die Kosten.InformationsquelleAutor der Antwort paxdiablo
Für eine Menge von utility-Typ-Verfahren, apache commons Bibliotheken, den festen Implementierungen, die kann man entweder nutzen oder erhalten zusätzliche Einsicht aus. In diesem Fall, es ist eine Methode für die Suche nach dem kleinsten der drei Doppelbetten zur Verfügung, in org.apache.Unterhaus.lang.math.NumberUtils. Ihre Umsetzung ist eigentlich fast identisch zu deinem ersten Gedanken:
InformationsquelleAutor der Antwort wpgreenway
Nicht unbedingt schneller als dein code.
InformationsquelleAutor der Antwort Joop Eggen
Können Sie ternärer operator wie folgt:
Dauert nur eine Abtretung und mindestens zwei Vergleiche.
Aber ich denke, dass diese Aussagen keinen Einfluss auf die Ausführung der Zeit, Ihre erste Logik nehmen gleichen Zeit wie die von mir und allen anderen.
InformationsquelleAutor der Antwort Abhishek
kann verbessert werden zu:
InformationsquelleAutor der Antwort Maximus Ali
OP effizienten code hat einen Fehler:
wenn
a == b
unda (or b) < c
wird der code pick c anstatt a oder b.InformationsquelleAutor der Antwort newbie
Es sieht alles ok, der code wird in Ordnung sein, es sei denn, Sie tun dies in einer engen Schleife. Ich würde auch überlegen,
InformationsquelleAutor der Antwort QED
Math.min
verwendet einen einfachen Vergleich zu tun, seine Sache. Der einzige Vorteil, um nicht mit Math.min speichern Sie die extra Funktion aufruft, aber das ist eine vernachlässigbare Einsparung.Wenn du mehr als nur drei zahlen, mit einem
minimum
- Methode für eine beliebige Anzahl vondouble
s könnte wertvoll sein und würde etwa so Aussehen:Drei zahlen dies ist das funktionale äquivalent des
Math.min(a, Math.min(b, c));
aber Sie speichern eine Methode invocation.InformationsquelleAutor der Antwort Kris
Wenn Sie anrufen, min() um 1kk mal mit verschiedenen a, b, c, dann mit meiner Methode:
Hier nur zwei Vergleiche. Es gibt keine Möglichkeit, calc schneller 😛
InformationsquelleAutor der Antwort Alexander Cyberman
Für Reine Zeichen-der-code-Effizienz, ich kann nichts finden, besser als
InformationsquelleAutor der Antwort Thomas Allenbaugh
Ich würde
min/max
(und keine Sorge sonst) ... aber, hier ist noch eine "lange hand" - Ansatz, die kann oder kann nicht einfacher sein, für einige Leute zu verstehen. (Ich würde nicht erwarten, dass es schneller oder langsamer als der code in der post.)Nur werfen es in die Mischung.
Beachten Sie, dass dies nur der side-effecting Variante von Abhishek ' s Antwort.
InformationsquelleAutor der Antwort
Für diejenigen, die finden dieses Thema sehr viel später:
Wenn Sie nur drei Werte miteinander zu vergleichen gibt es keinen signifikanten Unterschied. Aber, wenn Sie min von, sagen wir, dreißig oder sechzig Werte "min" könnte einfacher sein für jedermann lesbar in den code das nächste Jahr:
Aber wenn Sie denken, der Geschwindigkeit, vielleicht bessere Möglichkeit wäre, setzen die Werte in die Liste, und suchen Sie dann min:
Würden Sie Zustimmen?
InformationsquelleAutor der Antwort Sinisa
Schreiben Sie eine Methode minimum3, liefert die kleinste der drei floating-point-zahlen. Verwenden Sie die Mathematik.min-Methode zu implementieren minimum3. Integrieren die Methode in einer Anwendung, die liest drei Werte, die vom Benutzer bestimmt den kleinsten Wert und zeigt das Ergebnis an.
InformationsquelleAutor der Antwort karan
Verwenden Sie einfach diese mathematische Funktion
Erhalten Sie die Antwort in eine einzige Zeile.
InformationsquelleAutor der Antwort rakesh