Я тренировался с помощью структуры данных для практики (нет связанной с курсом работы) структуры данных trie
. Этот класс используется для хранения подстрок строки. Для строки длиной n
есть n(n+1)/2
подстроки. В частности, эта реализация trie
сохраняет естественное упорядочение и более эффективна, чем TreeMap
или TreeSet
на случайных строках. Сохранение в памяти одного символа, а не всей строки сохраняется.Java Trie Optimization
Я думаю, что для хранения подстрок суффикс-массив может быть лучшим способом, но я хотел убедиться, что этот класс 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 или this: http://stackoverflow.com/questions/3806788/trie-data-structures-java – DNA