2017-09-09 2 views
-1

Ce programme s'exécute en 0.099s sur mon appareil. Je veux l'exécuter en moins de 0.01s. Comment faire pour que cela se produise C'est probablement lié au flux de lecture et d'écriture. Ce programme prend en général une chaîne de caractères et effectue des opérations sur les caractères de la chaîne un par un dans la méthode calc et renvoie une valeur int. Vous n'avez pas vraiment besoin de comprendre le code. Les optimisations éventuelles doivent se produire avec le flux d'E/S ou à l'intérieur de la méthode. Je ne peux pas penser à un autre endroit où cette optimisation doit se produire.Comment rendre mon programme Java plus rapide?

import java.io.*; 
import java.util.*; 

class ride{ 
static int calc(String s){ 
char[] d=new char[s.length()]; 
s.getChars(0,s.length(),d,0); 
int sum=1; 
for(char c:d){ 
sum*=(c-'A'+1); 
} 
return sum%47; 
} 



public static void main(String args[]){ 
try{ 
BufferedReader br=new BufferedReader(new FileReader("ride.in")); 
FileWriter fw=new FileWriter("ride.out"); 
String s; 
while((s=br.readLine())!=null){ 
if(calc(s)==calc(br.readLine())){ 
fw.write("GO\n"); 
} 
else 
fw.write("STAY\n"); 
} 
fw.close(); 
} 
catch(IOException e){ 
System.out.println(e); 
} 
} 
} 
+1

somme ou produit? sum * = ou sum + = Aussi s'il vous plaît corriger votre mise en forme –

+5

Clairement, votre accent devrait être sur la lisibilité, la maintenabilité et la robustesse. Pas sur la performance. Votre code n'est pas indenté, ne respecte pas les conventions de dénomination Java, utilise des noms de variables à une lettre obscurs et ne ferme pas ses flux de fichiers. Un programme incorrect rapide, mais impossible à maintenir est inutile. On ne sait pas non plus comment vous mesurez le temps que cela prend. Ma conjecture est la plupart du temps est pris à partir de la JVM. –

+2

Les programmes s'exécutent plus rapidement si vous les indentez correctement. (OK ... c'est un mensonge ... mais indentement votre code correctement avant ** vous demandez à quelqu'un d'autre de le lire.) –

Répondre

0

donnent bufferReader une plus grande taille de la mémoire tampon, peut-être 80k ou plus, dépendent de votre RAM disponible:

BufferedReader br=new BufferedReader(new FileReader("ride.in"), 81920); 
0

Puisque vous utilisez une instance BufferedReader, votre manque de performances peuvent ne pas être due à I/O (même en lisant plusieurs caractères, il y aura seulement quelques appels système au système d'exploitation sous-jacent). Bien sûr, cela dépend de la longueur du fichier.

Donc, pour obtenir de meilleures performances, essayez de commencer à travailler sur la fonction de calcul. Par exemple, vous pouvez éviter de calculer la longueur deux fois.