树中的最大独立集。复习算法,需要证明

时间:2010-10-31 04:03:24

标签: graph-theory proof

伪代码:

void recursive('k'){ // 'k' and 'i' vertices
  sumA = 0;
  sumB = 0;
  for each non visited 'i' neighbor do{
     recursive('i');
     sumA = sumA + b['i'];
     sumB = sumB + max(a['i'], b['i']);
     }
  a['k'] = 1 + sumA;
  b['k'] = sumB;
  }


void main(){
 a = b = 0; //initialize tables with 0 (zeros)
 recursive('X');  //let 'X' be an arbitrary root
 cout<<max(a['X'], b['X']);
 }

需要证明max(a['X'], b['X'])是树中最大独立集的基数。 我错过了什么?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

元素a [i]是以i为根的子树中包含i的最大独立集的大小。

元素b [i]是以i为根的子树中最大独立集的大小,不包含i。

算法递归计算这些算法,然后在根处选择最大值。