我正在尝试计算给定maximum antichain的poset。 我创建了以下方法:
public boolean isIncomparable(Node a,Node b)
{
if(isReachable(a,b)||isReachable(b,a))
return false;
return true;
}
当且仅当两个节点无法比较时才返回true(即,没有从a
到b
或从b
到a
的路径)。
我定义了一个LinkedHashMap
LinkedHashMap<Node,ArrayList<Node>> map=new LinkedHashMap<Node,ArrayList<Node>>();
将每个节点N映射到其无法比较的元素Incomp(N)
。
for(int i=0;i<nodes.size();i++)
{
Node a=nodes.get(i);
ArrayList<Node> tmp=new ArrayList<Node>();
for(int j=i+1;j<nodes.size();j++)
{
Node b=nodes.get(j);
if(isIncomparable(a,b))
tmp.add(b)
}
map.put(a,tmp);
}
例如:假设元素是{A,B,C,D},具有以下关系A> B,A> C,D> C然后
Incomp(A)={D}
Incomp(B)={C,D}
Incomp(C)={}
Incomp(D)={}
请注意,不允许重复(即Incomp(C)={B}
,但由于(B,C)在Incomp(B)
,我们不需要重复它。
我被困在这里。我应该只检查Incomp(N)
元素之间的不可比性,然后获得最大大小的密钥作为最大的反链?换句话说,如何通过此设置找到最大的反链?
我无法生成大小为k的所有子集,因为这样效率很低。