Преобразование trie в обратное trie?

109
11

Предположим, что у меня есть структура данных trie, содержащая несколько строк. Чтобы найти строку в trie, я начинал с корня и следовал указателю, помеченному соответствующими символами строки, чтобы, пока я не достиг определенного узла.

Теперь предположим, что я хочу построить "обратное trie" для того же набора строк, где вместо поиска строк, начиная с первого символа, я бы поискал строки, начиная с последнего символа.

Есть ли эффективный алгоритм для превращения попыток в обратные попытки? В худшем случае я всегда мог перечислить все строки в trie, а затем вставлять их по очереди в обратное trie, но похоже, что может быть лучшее и более умное решение.

спросил(а) 2013-01-11T08:12:00+04:00 7 лет, 10 месяцев назад
1
Решение
59

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

Другими словами, нет "более умного решения", чем для создания обратной трюки.

ответил(а) 2013-01-11T08:18:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема