Допустим, у меня есть ориентированный граф с одним корнем и без циклов. Я хотел бы добавить тип для каждого узла (например, как целое число с некоторым настраиваемым порядком) со следующим свойством:
if Node1.type <= Node2.type then there exists a path from Node1 to Node2
Обратите внимание, что топологическая сортировка на самом деле удовлетворяет обратному свойству:
if there exists a path from Node1 to Node2 then Node1.type <= Node2.type
поэтому его нельзя использовать здесь.
Теперь обратите внимание, что здесь нельзя использовать целые числа с естественным порядком, потому что можно сравнивать каждые 2 целых числа, то есть порядок целых чисел является линейным, а дерево не обязательно таким.
Вот пример. Предположим, что граф имеет 4 узла A, B, C, D
и 4 стрелки:
A->B, A->C, B->D, C->D
Так это бриллиант. Теперь мы можем положить
A.type = 00
B.type = 01
C.type = 10
D.type = 11
где справа у нас есть целые числа в двоичном формате. Сравнение определяется побитово:
(X <= Y) if and only if (n-th bit of X <= n-th bit of Y for all n)
Итак, я предполагаю, что такой порядок можно использовать, вопрос в том, как построить значения из данного графика? Я даже не уверен, всегда ли существует решение. Любые подсказки?
ОБНОВЛЕНИЕ: Поскольку есть некоторое недопонимание терминологии, которую я использую, позвольте мне быть более подробным: меня интересует ориентированный ациклический граф, в котором есть ровно один узел без предшественников (он же корень) и есть не более одной стрелки между любыми двумя узлами. Примером может служить алмаз. Он не должен иметь один лист (т. е. узел без потомков). Каждый узел может иметь несколько предшественников и несколько преемников. Можно сказать, что это частично упорядоченный набор с наименьшим элементом (т. е. уникальным глобально минимальным элементом).
Node1.type <= Node2.type
никогда не выполняется, то требование тривиально выполняется. - person n. 1.8e9-where's-my-share m.   schedule 14.06.2016a < b then there's a path from a to b
. Еслиa < b
ложно, то все утверждение истинно. - person n. 1.8e9-where's-my-share m.   schedule 14.06.2016then the whole statement is true
Вы имеете в виду, что вы не можете определить, существует ли путь, если!a<b
? Я это понимаю. Было бы идеально иметь отношенияif and only if
, но мне это не нужно. - person freakish   schedule 14.06.2016