Представьте, ориентированный ациклический граф следующим образом, где:Алгоритм поиска минимального общего предка в ориентированном ациклическом графе?
- «А» есть корень (всегда есть ровно один корень)
- каждый узел знает своего родителя (ей)
- имена узла произвольно - ничто не может быть выведен из них
- мы знаем из другого источника, что узлы были добавлены в дерево в порядке А до G (например, они коммиты в системе управления версий)
Какой алгоритм я мог бы использовать для определения наименьшего общего предка (LCA) двух произвольных узлов, к примеру, общий предок:
- B и Е представляет собой В
- D и F является B
Примечание:
- Существует не обязательно единственный путь к данный узел из корня (например, «G» имеет два пути), поэтому вы не можете просто traverse paths from root to the two nodes and look for the last equal element
- Я нашел алгоритмы LCA для деревьев, особенно двоичных деревьев, но они здесь не применяются, поскольку узел может иметь несколько родителей (т. Е. Это не дерево)
Вы имеете в виду «ацилический». И «родителями» вы имеете в виду все узлы, которые имеют направленный фронт в рассматриваемый узел? – AndyG
Все узлы имеют направленные ребра для своих родителей, если они есть (например, A не имеет родителей). AFAIK граф является циклическим из-за цикла G-F-E-B-C-D-G. –
Если вы разместите этот вопрос здесь: http://cs.stackexchange.com/, вы определенно получите больше и больше ответов. –