Преобразование trie в обратное trie?
Предположим, что у меня есть структура данных trie, содержащая несколько строк. Чтобы найти строку в trie, я начинал с корня и следовал указателю, помеченному соответствующими символами строки, чтобы, пока я не достиг определенного узла.
Теперь предположим, что я хочу построить "обратное trie" для того же набора строк, где вместо поиска строк, начиная с первого символа, я бы поискал строки, начиная с последнего символа.
Есть ли эффективный алгоритм для превращения попыток в обратные попытки? В худшем случае я всегда мог перечислить все строки в trie, а затем вставлять их по очереди в обратное trie, но похоже, что может быть лучшее и более умное решение.
Но узлы в вашем trie находятся в основном случайном порядке, если ваши критерии упорядочения основаны на обратном строках. То есть, учитывая последовательность [aardvark, bat, cat, dog, elephant, fox]
, которые находятся в алфавитном порядке, обращение вспять слов не даст вам последовательности [xof, tnahpele, god, tac, tab, kravdraa]
.
Другими словами, нет "более умного решения", чем для создания обратной трюки.