2017-09-09 7 views
-1

このプログラムは自分のデバイスで0.099秒で動作します。私はそれを0.01秒未満で実行したい。これを起こす方法。おそらくそれは読み書きのストリームに関係しています。このプログラムは基本的に文字列を取り込み、メソッドcalcで文字列の文字を1つずつ処理し、int値を返します。コードを理解する必要はありません。 i/oストリームやメソッドの中で起こる必要がある場合の最適化。私は、この最適化が起こる必要がある他の場所について考えることはできません。私のJavaプログラムをより速く走らせるには?

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

合計または製品ですか? sum * =またはsum + =また、書式設定を修正してください。 –

+5

明らかに、読みやすさ、保守性、堅牢性に焦点を当てるべきです。パフォーマンスではありません。あなたのコードはインデントされておらず、Javaの命名規則を遵守せず、あいまいな1文字の変数名を使用し、ファイルストリームを閉じません。速いが維持できない間違ったプログラムは役に立たない。これを実行するのにかかる時間を測定する方法も不明です。私の推測では、ほとんどの時間はJVMを開始することです。 –

+2

プログラムを適切にインデントすると、プログラムの実行速度が向上します。 (OK ...それはうそです...しかし、あなたのコードを正しくインデントしてください**前に**誰かにそれを読むように依頼してください。) –

答えて

0

はあなたの使用可能なRAMに依存し、多分80K以上、bufferReader大きなバッファサイズを与える:

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

あなたはBufferedReaderのインスタンスを使用しているので、パフォーマンスのあなたの欠如は私にはないかもしれません/ O(複数のcharを読み込んでいる間も、基盤となるオペレーティングシステムへのシステムコールはほんのわずかです)。もちろん、これはファイルの長さによって異なります。

パフォーマンスを向上させるには、calc関数の作業を開始してください。たとえば、長さを2回計算することを避けることができます。