Ответ 1
Перечисление пути?
Обход DFS?
или мой любимый
Дерево arrayfication!
Мне интересно, существует ли существующее слово для описания процесса, который я сейчас использую. Я хочу называть это "сплющиванием дерева", но я чувствую, что должно быть лучшее слово или фраза.
ввод:
|--D
--B
| |--C
|
A-E
|
| |--G
--F
|--H
выход:
[ [A, B, D]
[A, B, C]
[A, E]
[A, F, G]
[A, F, H] ]
Установлено ли имя для этого процесса?
Перечисление пути?
Обход DFS?
или мой любимый
Дерево arrayfication!
Как насчет " Увлажняющий" (или DeHydrating) в зависимости от ситуации?
Я бы сказал, что вы просто пересекаете дерево, сохраняя путь к текущему node. Когда вы посещаете лист, вы печатаете полный путь к листу.
Я не думаю, что есть определенное имя, но оно не сильно отличается от очень простого обхода.
De-Normalization показалось бы лучшим. Поскольку, действительно, если вы заметили свою новую структуру, у вас есть избыточные данные, и она, по-видимому, будет непосредственно отображаться в концептуальной идее.
Как насчет "Chainsawing"
Да, он называется Сериализация
Я просто столкнулся с вики-статьей " Disjoint Sets", а термин, который он использует, - это "сжатие пути".
Выдержки:
... Второе улучшение, называемое path сжатие, является способом уплощения структура дерева всякий раз На нем используется Find. Идея состоит в том, что каждый node посетил путь к корню node может также быть прикреплен напрямую к корню node; все они разделяют такой же представитель. Для этого, как Найти рекурсивно пересекает tree, он изменяет каждый родитель nodeссылку на корень, чтобы он найденный. Полученное дерево много льстит, ускоряя будущие операции не только по этим элементам, но и по ссылки на них, непосредственно или косвенно.
Вам нужно сначала выполнить поиск глубины, чтобы захватить каждый путь от корня до листа.
Псевдокод:
global allPaths = []
R = root
currentPath = []
findPaths(R, currentPath)
findPaths(R, currentPath){
if R has no children,
allPaths.add( currentPath )
else
for each child C in R:
findPaths(C, currentPath + R)
}
Я думаю об этом как коалесцирует части дерева.
Если вход является деревом, а выход - это список списков, которые вы цитируете, вы фактически не ищете фразу для процесса, вы ищете имя для подпрограммы, которую вы вызываете. И имя такой подпрограммы должно быть описанием того, что она возвращает.
Как насчет RootPathsOfLeaves
? или их некоторая перегруппировка...