Три для эффективного хранения дублированных подстрок в переполнении стека

Я написал программу для реализации базового Trie на C ++, каждый узел имеет 26 дочерних указателей (для алфавитов английского языка), а класс Node выглядит следующим образом:

class Node
{
public:
Node* parent;
Node* child[26];
unsigned int number_of_children;
....
}

Теперь может быть много слов, таких как {snapple, dapple}, {distract, привлечь} и т. Д., В которых совпадают более 3 алфавитов. Я хочу сохранить отдельные записи этих подслов (как в примере выше — яблоко, тракт) и позволить другим указывать на них (например, {sn-ptr_to_apple, d-ptr_to_apple}, {dis-ptr_to_tract, at-ptr_to_tract} ). Я считаю, что лучше всего обрабатывать это, вставляя само слово, вместо того, чтобы иметь функцию, которая выполняет это после завершения вставки.

Мне нужна помощь в разработке этого, в настоящее время я не смотрю на эффективность выполнения, скорее код / ​​дизайн должен быть компактным. В настоящее время я посещаю узел и проверяю всех ненулевых братьев и сестер (путем обхода дочерних братьев и сестер) на соответствие входному слову, а затем сохраняю указатели на случай совпадения, скажем, 4 слов (но код получает дольше и запутывает).

1

Решение

Традиционные попытки сжимают общие префиксы. Вы, по сути, хотите сжать общие суффиксы. Самый простой способ — просто построить свои записи в обратном направлении.

Теперь это означает, что вы должны прочитать строку назад в три.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]