私はtrie
のデータ構造で練習しています(コースワークは関係ありません)。このクラスは、文字列の部分文字列を格納するために使用されます。長さがn
の文字列の場合、合計部分文字列はn(n+1)/2
です。特に、trie
のこの実装は、自然順序付けを保持し、ランダムな文字列のTreeMap
またはTreeSet
より効率的です。文字列全体ではなく、単一の文字を格納するだけでなく、メモリに保存されます。Java Trieの最適化
サフィックス配列を格納する方がよいかもしれませんが、新しいプロジェクトを開始する前に、このtrieクラスの速度が合理的に最適化されていることを確認したかったのです。
class Trie
{
final Trie my_parent;
final Trie[] my_children;
final char my_value;
public Trie(final Trie the_parent, final char the_value)
{
my_parent = the_parent;
my_value = the_value;
my_children = new Trie[26];
}
public int insertIterative(final char[] the_text)
{
int number = 0;
Trie parent = this;
for(int ator = 0; ator < the_text.length; ator++)
{
final int key = the_text[ator] - 97;
Trie child = parent.my_children[key];
if(child == null)
{
child = new Trie(parent, the_text[ator]);
parent.my_children[key] = child;
number++;
}
parent = child;
}
return number;
}
public String getString()
{
final StringBuilder builder = new StringBuilder();
Trie parent = this;
while(parent.my_parent != null)
{
builder.append(parent.my_value);
parent = parent.my_parent;
}
return builder.reverse().toString();
}
}
あなたが欲しい特定のパフォーマンス上の問題に気がつきましたか?プロファイラを使用してコードを実行すると、どの部分が最も時間がかかっているかを確認できますか?あなたが "最適化"と言うときは、スピードやメモリを意味しますか? – DNA
私は比較するものがないので、スピードの面で言うのは難しいです。私はプロファイラーがそれを見なければならないと聞いたことはありません。 – ntin
他のTrieの実装と比較することができます。たとえば、次の質問を参照してください。http://stackoverflow.com/questions/623892/where-do-i-find-a-standard-trie-based-map-implementation-in- javaまたはこれ:http://stackoverflow.com/questions/3806788/trie-data-structures-java – DNA