比方说,我有一个有向图,只有一个根,没有周期。我想每个节点上添加类型(举例来说,如一些自定义排序的整数)具有以下特性:将有向图编码为数字
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)
所以我猜这样的排序可以使用,问题是如何构造给定图的值?我甚至不确定解决方案是否一直存在。任何提示?
UPDATE:既然有关于我使用的是让我更explicite术语一些误解:我感兴趣的是向无环图,使得在没有前辈在一个节点(又名根),并有一个在任何两个节点之间的最多一个箭头。钻石就是一个例子。它不是不是必须有一个叶子(即没有后继的节点)。每个节点可能有多个前辈和多个后继者。您可能会说这是一个具有最小元素的部分有序集合(即唯一的全局最小元素)。
如果'Node1.type <= Node2.type'永远不会满足要求, 。 –
@ n.m。我不确定我是否理解,谨慎地阐述? – freakish
如果'a