Optimierung: int zu int-Array und andersherum
-
Hallo zusammen,
habe eine sehr performance kritische Funktion, da sie enorm oft aufgerufen wird. Die Aufgabe ist sehr einfach, es muss ein int in ein int-Array umgewandelt werden und das möglichst schnell. Mein bisheriger Code sieht so aus(java):
public static int [] numberToArray(int number, int length){ int index = length -1; int [] array = new int[length]; //No visible speed enhance /*String s = ""+number; for(int i = 0; i < s.length(); ++i) array[i] = s.charAt(i)-'0';*/ while(number != 0){ array[index--] = number%10; number /= 10; } return array; }
Die auskommentierte String Variante brachte keine sichtbaren Fortschritte. Die Methode, die ein int-Array zu einem int macht sieht im Moment so aus:
final static int powersOfTen[]={1,10,100,1000,10000,100000, 1000000, 10000000, 100000000, 100000000}; public static int arrayToNumber(int [] array){ int resultnumber = 0; for(int i = 0; i < array.length; i++ ){ //resultnumber += Math.pow(10, array.length-i-1)*array[i]; resultnumber += powersOfTen[array.length-i-1]*array[i]; } return resultnumber; }
Durch das Array konnte ich die Laufzeit von 90 Sekunden auf 70 Sekunden drücken im Vergleich zur auskommentierten Math.pow Variante.
Vielleicht kennt jemand noch ein paar Tricks, um noch ein wenig was rauszukitzeln.
Vielen Dank im voraus
KaPtainCugel
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Java verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wie genau werden die Funktionen gegeneinander aufgerufen?
-
Mal das gleich mit c versucht? um zu sehen, was du hier für ein Performance Vorteil hast?
-
Die Funktionen werden mehr oder weniger unabhängig voneinander aufgerufen, eine Zahl wird in ein Array umgewandelt, dann wird damit gearbeitet und eine neue Zahl durch das Array dargestellt und dann das Array wieder in eine Zahl umgewandelt.
-
Für die Umwandlung int->Array fällt mir auf die Schnelle nichts ein, für die Umwandlung Array->int schon:
public static int arrayToNumber(int [] array){ int resultnumber = 0; for(int i = 0; i < array.length; i++ ){ //resultnumber += Math.pow(10, array.length-i-1)*array[i]; //resultnumber += powersOfTen[array.length-i-1]*array[i]; resultnumber = 10*resultnumber+array[i]; } return resultnumber; } //oder public static int arrayToNumber(int [] array){ int resultnumber = 0; int fact=1; for(int i = array.length-1; i >=0; i-- ){ resultnumber+=fact*array[i]; fact*=10; } return resultnumber; }
(kommt beides ohne das Hilfsarray aus