2017-05-07 12 views
-1

私のプログラミングクラスでは、サンプル文字列から取った統計に基づいて単語を生成するAIプログラムを提出しました。しかし、次のコード行は、プログラムを非常に遅くしました。このプロセスは、単語リストに含まれる単語が作成されるまで繰り返されます。私の質問は、私が配列に単語リストを初期化すると、プロセスが高速化できるかどうかです。私はHDDの代わりにRAMを読んでいると分かります。私はこれを私のコードに実装しようとしましたが、スプライスするには複雑すぎました。 <初期化を通してプログラムを高速化する

+1

は(あなたは、大文字と小文字を区別しない検索をしたい場合は、すべて大文字または小文字)、単語の 'java.util.List'を使用すると'リスト# contains'おそらく –

+0

どのくらいの大きさのcommon-words.txtですか?それがメモリに収まる場合は、可能であればHashMap –

+1

に行き、可能であればこれを単一のメモリオブジェクトに読み込みます。常にファイルを開いたり読んだりするのは非常に遅いです。ファイルが*非常に*大きい場合、ファイル(またはその一部)がより迅速に読み取られるように、ある種の索引付けスキームを考え出す必要があるかもしれません。 – markspace

答えて

2

あなたが一度だけそのように、静的初期化子を使用して設定HashSet使用するスピードのために良いだろう:

private static final Set<String> lowerCaseWords = new HashSet<String>(); 
static { 
    final Scanner inputFile = new Scanner(new File("common_words.txt")); 
    while (inputFile.hasNextLine()) { 
     lowerCaseWords.add(inputFile.nextLine().toLowerCase()); 
    } 
    inputFile.close(); 
} 

ときに、クラスの静的初期化子(static {ブロック)が一度だけ実行されますがクラスがロードされるときにすべての単語をSetにロードすることができます。


あなたがそのようにようSetを使用することができます。

if (lowerCaseWords.contains(candidateWord.toLowerCase()) { 
    // Is a word 
} else { 
    // Isn't a word 
} 
関連する問題