当不可比性关系以LinkedHashMap给出时,计算最大反链

时间:2014-10-15 23:10:25

标签: java graph combinatorics poset

我正在尝试计算给定maximum antichainposet。 我创建了以下方法:

public boolean isIncomparable(Node a,Node b)
{
    if(isReachable(a,b)||isReachable(b,a))
         return false;
    return true;
}

当且仅当两个节点无法比较时才返回true(即,没有从ab或从ba的路径)。

我定义了一个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的所有子集,因为这样效率很低。

0 个答案:

没有答案